import 'package:test_sa/models/new_models/assigned_employee.dart';

import '../device/asset.dart';
import '../lookup.dart';
import 'call_site_contact_person.dart';

class CallRequest {
  CallRequest({
    this.id,
    this.callNo,
    this.callComments,
    this.asset,
    this.assignedEmployee,
    this.callSiteContactPerson,
    this.status,
    this.callLastSituation,
    this.defectType,
    this.firstAction,
    this.loanAvailablity,
    this.assetLoan,
    this.assetType,
  });

  CallRequest.fromJson(dynamic json) {
    id = json['id'];
    callNo = json['callNo'];
    callComments = json['callComments'];
    asset = json['asset'] != null ? Asset.fromJson(json['asset']) : null;
    assignedEmployee = json['assignedEmployee'] != null ? AssignedEmployee.fromJson(json['assignedEmployee']) : null;
    if (json['callSiteContactPerson'] != null) {
      callSiteContactPerson = [];
      json['callSiteContactPerson'].forEach((v) {
        callSiteContactPerson!.add(CallSiteContactPerson.fromJson(v));
      });
    }
    status = json['status'] != null ? Lookup.fromJson(json['status']) : null;
    callLastSituation = json['callLastSituation'] != null ? Lookup.fromJson(json['callLastSituation']) : null;
    defectType = json['defectType'] != null ? Lookup.fromJson(json['defectType']) : null;
    firstAction = json['firstAction'] != null ? Lookup.fromJson(json['firstAction']) : null;
    loanAvailablity = json['loanAvailablity'] != null ? Lookup.fromJson(json['loanAvailablity']) : null;
    assetLoan = json['assetLoan'] != null ? AssetInfo.fromJson(json['assetLoan']) : null;
    assetType = json['assetType'];
  }

  num? id;
  String? callNo;
  String? callComments;
  Asset? asset;
  AssignedEmployee? assignedEmployee;
  List<CallSiteContactPerson>? callSiteContactPerson;
  Lookup? status;
  Lookup? callLastSituation;
  Lookup? defectType;
  Lookup? firstAction;
  Lookup? loanAvailablity;
  AssetInfo? assetLoan;
  num? assetType;

  CallRequest copyWith({
    num? id,
    String? callNo,
    String? callComments,
    Asset? asset,
    AssignedEmployee? assignedEmployee,
    List<CallSiteContactPerson>? callSiteContactPerson,
    Lookup? status,
    Lookup? callLastSituation,
    Lookup? defectType,
    Lookup? firstAction,
    Lookup? loanAvailablity,
    AssetInfo? assetLoan,
    num? assetType,
  }) =>
      CallRequest(
        id: id ?? this.id,
        callNo: callNo ?? this.callNo,
        callComments: callComments ?? this.callComments,
        asset: asset ?? this.asset,
        assignedEmployee: assignedEmployee ?? this.assignedEmployee,
        callSiteContactPerson: callSiteContactPerson ?? this.callSiteContactPerson,
        status: status ?? this.status,
        callLastSituation: callLastSituation ?? this.callLastSituation,
        defectType: defectType ?? this.defectType,
        firstAction: firstAction ?? this.firstAction,
        loanAvailablity: loanAvailablity ?? this.loanAvailablity,
        assetLoan: assetLoan ?? this.assetLoan,
        assetType: assetType ?? this.assetType,
      );

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    map['id'] = id;
    map['callNo'] = callNo;
    map['callComments'] = callComments;
    if (asset != null) {
      map['asset'] = asset!.toJson();
    }
    if (assignedEmployee != null) {
      map['assignedEmployee'] = assignedEmployee!.toJson();
    }
    if (callSiteContactPerson != null) {
      map['callSiteContactPerson'] = callSiteContactPerson!.map((v) => v.toJson()).toList();
    }
    if (status != null) {
      map['status'] = status!.toJson();
    }
    if (callLastSituation != null) {
      map['callLastSituation'] = callLastSituation!.toJson();
    }
    if (defectType != null) {
      map['defectType'] = defectType!.toJson();
    }
    if (firstAction != null) {
      map['firstAction'] = firstAction!.toJson();
    }
    if (loanAvailablity != null) {
      map['loanAvailablity'] = loanAvailablity!.toJson();
    }
    if (assetLoan != null) {
      map['assetLoan'] = assetLoan!.toJson();
    }
    map['assetType'] = assetType;
    return map;
  }
}
