import 'dart:convert';

class TodayMeetingModel {
  List<Meeting>? meetings;
  List<Meeting>? privateMeetings;
  String? note;

  TodayMeetingModel({
    this.meetings,
    this.privateMeetings,
    this.note,
  });

  factory TodayMeetingModel.fromRawJson(String str) =>
      TodayMeetingModel.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory TodayMeetingModel.fromJson(Map<String, dynamic> json) =>
      TodayMeetingModel(
        meetings: json["meetings"] == null
            ? []
            : List<Meeting>.from(
                json["meetings"]!.map((x) => Meeting.fromJson(x))),
        privateMeetings: json["private_meetings"] == null
            ? []
            : List<Meeting>.from(
                json["private_meetings"]!.map((x) => Meeting.fromJson(x))),
        note: json["note"],
      );

  Map<String, dynamic> toJson() => {
        "meetings": meetings == null
            ? []
            : List<dynamic>.from(meetings!.map((x) => x.toJson())),
        "private_meetings": privateMeetings == null
            ? []
            : List<dynamic>.from(privateMeetings!.map((x) => x.toJson())),
        "note": note,
      };
}

class Meeting {
  int? id;
  int? locationsId;
  int? subjectId;
  int? managerId;
  int? ownerId;
  String? azHour;
  String? taHour;
  dynamic description;
  int? status;
  int? accepted;
  DateTime? dateMeeting;
  DateTime? endDate;
  DateTime? createdAt;
  DateTime? updatedAt;
  String? dateJalali;
  String? statusTxt;
  String? az;
  String? ta;
  List<dynamic>? minutes;
  Location? location;
  Subject? subject;
  String? visitName;
  String? visitMobile;
  String? visitRole;
  String? visitCompany;

  Meeting({
    this.id,
    this.locationsId,
    this.subjectId,
    this.managerId,
    this.ownerId,
    this.azHour,
    this.taHour,
    this.description,
    this.status,
    this.accepted,
    this.dateMeeting,
    this.endDate,
    this.createdAt,
    this.updatedAt,
    this.dateJalali,
    this.statusTxt,
    this.az,
    this.ta,
    this.minutes,
    this.location,
    this.subject,
    this.visitName,
    this.visitMobile,
    this.visitRole,
    this.visitCompany,
  });

  factory Meeting.fromRawJson(String str) => Meeting.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory Meeting.fromJson(Map<String, dynamic> json) => Meeting(
        id: json["id"],
        locationsId: json["locations_id"],
        subjectId: json["subject_id"],
        managerId: json["manager_id"],
        ownerId: json["owner_id"],
        azHour: json["az_hour"],
        taHour: json["ta_hour"],
        description: json["description"],
        status: json["status"],
        accepted: json["accepted"],
        dateMeeting: json["date_meeting"] == null
            ? null
            : DateTime.parse(json["date_meeting"]),
        endDate:
            json["end_date"] == null ? null : DateTime.parse(json["end_date"]),
        createdAt: json["created_at"] == null
            ? null
            : DateTime.parse(json["created_at"]),
        updatedAt: json["updated_at"] == null
            ? null
            : DateTime.parse(json["updated_at"]),
        dateJalali: json["date_jalali"],
        statusTxt: json["status_txt"],
        az: json["az"],
        ta: json["ta"],
        minutes: json["minutes"] == null
            ? []
            : List<dynamic>.from(json["minutes"]!.map((x) => x)),
        location: json["location"] == null
            ? null
            : Location.fromJson(json["location"]),
        subject:
            json["subject"] == null ? null : Subject.fromJson(json["subject"]),
        visitName: json["visit_name"],
        visitMobile: json["visit_mobile"],
        visitRole: json["visit_role"],
        visitCompany: json["visit_company"],
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "locations_id": locationsId,
        "subject_id": subjectId,
        "manager_id": managerId,
        "owner_id": ownerId,
        "az_hour": azHour,
        "ta_hour": taHour,
        "description": description,
        "status": status,
        "accepted": accepted,
        "date_meeting": dateMeeting?.toIso8601String(),
        "end_date": endDate?.toIso8601String(),
        "created_at": createdAt?.toIso8601String(),
        "updated_at": updatedAt?.toIso8601String(),
        "date_jalali": dateJalali,
        "status_txt": statusTxt,
        "az": az,
        "ta": ta,
        "minutes":
            minutes == null ? [] : List<dynamic>.from(minutes!.map((x) => x)),
        "location": location?.toJson(),
        "subject": subject?.toJson(),
        "visit_name": visitName,
        "visit_mobile": visitMobile,
        "visit_role": visitRole,
        "visit_company": visitCompany,
      };
}

class Location {
  int? id;
  String? address;
  String? addressEn;
  DateTime? createdAt;
  DateTime? updatedAt;

  Location({
    this.id,
    this.address,
    this.addressEn,
    this.createdAt,
    this.updatedAt,
  });

  factory Location.fromRawJson(String str) =>
      Location.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory Location.fromJson(Map<String, dynamic> json) => Location(
        id: json["id"],
        address: json["address"],
        addressEn: json["address_en"],
        createdAt: json["created_at"] == null
            ? null
            : DateTime.parse(json["created_at"]),
        updatedAt: json["updated_at"] == null
            ? null
            : DateTime.parse(json["updated_at"]),
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "address": address,
        "address_en": addressEn,
        "created_at": createdAt?.toIso8601String(),
        "updated_at": updatedAt?.toIso8601String(),
      };
}

class Subject {
  int? id;
  String? subject;
  dynamic subjectEn;
  DateTime? createdAt;
  DateTime? updatedAt;

  Subject({
    this.id,
    this.subject,
    this.subjectEn,
    this.createdAt,
    this.updatedAt,
  });

  factory Subject.fromRawJson(String str) => Subject.fromJson(json.decode(str));

  String toRawJson() => json.encode(toJson());

  factory Subject.fromJson(Map<String, dynamic> json) => Subject(
        id: json["id"],
        subject: json["subject"],
        subjectEn: json["subject_en"],
        createdAt: json["created_at"] == null
            ? null
            : DateTime.parse(json["created_at"]),
        updatedAt: json["updated_at"] == null
            ? null
            : DateTime.parse(json["updated_at"]),
      );

  Map<String, dynamic> toJson() => {
        "id": id,
        "subject": subject,
        "subject_en": subjectEn,
        "created_at": createdAt?.toIso8601String(),
        "updated_at": updatedAt?.toIso8601String(),
      };
}
