// To parse this JSON data, do
//
//     final familyBackground = familyBackgroundFromJson(jsonString);

import 'dart:convert';
import 'dart:ffi';

FamilyBackground familyBackgroundFromJson(String str) => FamilyBackground.fromJson(json.decode(str));

String familyBackgroundToJson(FamilyBackground data) => json.encode(data.toJson());

class FamilyBackground {
    FamilyBackground({
        this.company,
        this.position,
        this.relationship,
        this.relatedPerson,
        this.companyAddress,
        this.emergencyContact,
        this.incaseOfEmergency,
        this.companyContactNumber,
    });

    final Company? company;
    final Position? position;
    final Relationship? relationship;
    final RelatedPerson? relatedPerson;
    final String? companyAddress;
    final List<EmergencyContact>? emergencyContact;
    final bool? incaseOfEmergency;
    final String? companyContactNumber;

    factory FamilyBackground.fromJson(Map<String, dynamic> json) => FamilyBackground(
        company: json["company"] == null ? null : Company.fromJson(json["company"]),
        position: json["position"] == null ? null : Position.fromJson(json["position"]),
        relationship: json["relationship"] == null ? null : Relationship.fromJson(json["relationship"]),
        relatedPerson: json["related_person"] == null ? null : RelatedPerson.fromJson(json["related_person"]),
        companyAddress: json["company_address"],
        emergencyContact: json["emergency_contact"] == null ? [] : List<EmergencyContact>.from(json["emergency_contact"]!.map((x) => EmergencyContact.fromJson(x))),
        incaseOfEmergency: json["incase_of_emergency"],
        companyContactNumber: json["company_contact_number"],
    );

    Map<String, dynamic> toJson() => {
        "company": company?.toJson(),
        "position": position?.toJson(),
        "relationship": relationship?.toJson(),
        "related_person": relatedPerson?.toJson(),
        "company_address": companyAddress,
        "emergency_contact": emergencyContact == null ? [] : List<dynamic>.from(emergencyContact!.map((x) => x.toJson())),
        "incase_of_emergency": incaseOfEmergency,
        "company_contact_number": companyContactNumber,
    };
}

class Company {
    Company({
        this.id,
        this.name,
        this.category,
        this.privateEntity,
    });

    final int? id;
    final String? name;
    final Category? category;
    final bool? privateEntity;

    factory Company.fromJson(Map<String, dynamic> json) => Company(
        id: json["id"],
        name: json["name"],
        category: json["category"] == null ? null : Category.fromJson(json["category"]),
        privateEntity: json["private_entity"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "name": name,
        "category": category?.toJson(),
        "private_entity": privateEntity,
    };
}

class Category {
    Category({
        this.id,
        this.name,
        this.industryClass,
    });

    final int? id;
    final String? name;
    final IndustryClass? industryClass;

    factory Category.fromJson(Map<String, dynamic> json) => Category(
        id: json["id"],
        name: json["name"],
        industryClass: json["industry_class"] == null ? null : IndustryClass.fromJson(json["industry_class"]),
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "name": name,
        "industry_class": industryClass?.toJson(),
    };
}

class IndustryClass {
    IndustryClass({
        this.id,
        this.name,
        this.description,
    });

    final int? id;
    final String? name;
    final String? description;

    factory IndustryClass.fromJson(Map<String, dynamic> json) => IndustryClass(
        id: json["id"],
        name: json["name"],
        description: json["description"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "name": name,
        "description": description,
    };
}

class EmergencyContact {
    EmergencyContact({
        this.telco,
        this.isactive,
        this.provider,
        this.isprimary,
        this.numbermail,
        this.serviceType,
        this.contactinfoid,
        this.commServiceId,
    });

    final String? telco;
    final bool? isactive;
    final int? provider;
    final bool? isprimary;
    final String? numbermail;
    final int? serviceType;
    final int? contactinfoid;
    final int? commServiceId;

    factory EmergencyContact.fromJson(Map<String, dynamic> json) => EmergencyContact(
        telco: json["telco"],
        isactive: json["isactive"],
        provider: json["provider"],
        isprimary: json["isprimary"],
        numbermail: json["numbermail"],
        serviceType: json["service_type"],
        contactinfoid: json["contactinfoid"],
        commServiceId: json["comm_service_id"],
    );

    Map<String, dynamic> toJson() => {
        "telco": telco,
        "isactive": isactive,
        "provider": provider,
        "isprimary": isprimary,
        "numbermail": numbermail,
        "service_type": serviceType,
        "contactinfoid": contactinfoid,
        "comm_service_id": commServiceId,
    };
}

class Position {
    Position({
        this.id,
        this.title,
    });

    final int? id;
    final String? title;

    factory Position.fromJson(Map<String, dynamic> json) => Position(
        id: json["id"],
        title: json["title"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "title": title,
    };
}

class RelatedPerson {
    RelatedPerson({
        this.id,
        this.sex,
        this.gender,
        this.deceased,
        this.heightM,
        this.birthdate,
        this.esigPath,
        this.lastName,
        this.weightKg,
        this.bloodType,
        this.firstName,
        this.photoPath,
        this.maidenName,
        this.middleName,
        this.uuidQrcode,
        this.civilStatus,
        this.titlePrefix,
        this.titleSuffix,
        this.showTitleId,
        this.nameExtension,
    });

    final int? id;
    final String? sex;
    final String? gender;
    final bool? deceased;
    final double? heightM;
    final DateTime? birthdate;
    final String? esigPath;
    final String? lastName;
    final double? weightKg;
    final String? bloodType;
    final String? firstName;
    final String? photoPath;
    final dynamic maidenName;
    final String? middleName;
    final String? uuidQrcode;
    final String? civilStatus;
    final String? titlePrefix;
    final String? titleSuffix;
    final bool? showTitleId;
    final String? nameExtension;

    factory RelatedPerson.fromJson(Map<String, dynamic> json) => RelatedPerson(
        id: json["id"],
        sex: json["sex"],
        gender: json["gender"],
        deceased: json["deceased"],
        heightM: json["height_m"] == null?null:double.parse(json["height_m"].toString()),
        birthdate: json["birthdate"] == null ? null : DateTime.parse(json["birthdate"]),
        esigPath: json["esig_path"],
        lastName: json["last_name"],
        weightKg: json["weight_kg"] == null? null:double.parse(json["weight_kg"].toString()) ,
        bloodType: json["blood_type"],
        firstName: json["first_name"],
        photoPath: json["photo_path"],
        maidenName: json["maiden_name"],
        middleName: json["middle_name"],
        uuidQrcode: json["uuid_qrcode"],
        civilStatus: json["civil_status"],
        titlePrefix: json["title_prefix"],
        titleSuffix: json["title_suffix"],
        showTitleId: json["show_title_id"],
        nameExtension: json["name_extension"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "sex": sex,
        "gender": gender,
        "deceased": deceased,
        "height_m": heightM,
        "birthdate": "${birthdate!.year.toString().padLeft(4, '0')}-${birthdate!.month.toString().padLeft(2, '0')}-${birthdate!.day.toString().padLeft(2, '0')}",
        "esig_path": esigPath,
        "last_name": lastName,
        "weight_kg": weightKg,
        "blood_type": bloodType,
        "first_name": firstName,
        "photo_path": photoPath,
        "maiden_name": maidenName,
        "middle_name": middleName,
        "uuid_qrcode": uuidQrcode,
        "civil_status": civilStatus,
        "title_prefix": titlePrefix,
        "title_suffix": titleSuffix,
        "show_title_id": showTitleId,
        "name_extension": nameExtension,
    };
}

class Relationship {
    Relationship({
        this.id,
        this.type,
        this.category,
    });

    final int? id;
    final String? type;
    final String? category;

    factory Relationship.fromJson(Map<String, dynamic> json) => Relationship(
        id: json["id"],
        type: json["type"],
        category: json["category"],
    );

    Map<String, dynamic> toJson() => {
        "id": id,
        "type": type,
        "category": category,
    };
}
