import 'dart:convert';

class OneMeetingModel {
  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;
  List<Manager>? users;
  String? dateJalali;
  String? statusTxt;
  String? az;
  String? ta;
  Location? location;
  Subject? subject;
  Manager? manager;

  OneMeetingModel({
    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.users,
    this.dateJalali,
    this.statusTxt,
    this.az,
    this.ta,
    this.location,
    this.subject,
    this.manager,
  });

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

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

  factory OneMeetingModel.fromJson(Map<String, dynamic> json) =>
      OneMeetingModel(
        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"]),
        users: json["users"] == null
            ? []
            : List<Manager>.from(
                json["users"]!.map((x) => Manager.fromJson(x))),
        dateJalali: json["date_jalali"],
        statusTxt: json["status_txt"],
        az: json["az"],
        ta: json["ta"],
        location: json["location"] == null
            ? null
            : Location.fromJson(json["location"]),
        subject:
            json["subject"] == null ? null : Subject.fromJson(json["subject"]),
        manager:
            json["manager"] == null ? null : Manager.fromJson(json["manager"]),
      );

  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(),
        "users": users == null
            ? []
            : List<dynamic>.from(users!.map((x) => x.toJson())),
        "date_jalali": dateJalali,
        "status_txt": statusTxt,
        "az": az,
        "ta": ta,
        "location": location?.toJson(),
        "subject": subject?.toJson(),
        "manager": manager?.toJson(),
      };
}

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 Manager {
  int? id;
  String? name;
  int? role;
  String? mobile;
  dynamic otp;
  dynamic access;
  dynamic managerId;
  dynamic firebaseToken;
  int? isBlock;
  int? getSms;
  DateTime? createdAt;
  DateTime? updatedAt;

  Manager({
    this.id,
    this.name,
    this.role,
    this.mobile,
    this.otp,
    this.access,
    this.managerId,
    this.firebaseToken,
    this.isBlock,
    this.getSms,
    this.createdAt,
    this.updatedAt,
  });

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

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

  factory Manager.fromJson(Map<String, dynamic> json) => Manager(
        id: json["id"],
        name: json["name"],
        role: json["role"],
        mobile: json["mobile"],
        otp: json["otp"],
        access: json["access"],
        managerId: json["manager_id"],
        firebaseToken: json["firebase_token"],
        isBlock: json["is_block"],
        getSms: json["get_sms"],
        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,
        "name": name,
        "role": role,
        "mobile": mobile,
        "otp": otp,
        "access": access,
        "manager_id": managerId,
        "firebase_token": firebaseToken,
        "is_block": isBlock,
        "get_sms": getSms,
        "created_at": createdAt?.toIso8601String(),
        "updated_at": updatedAt?.toIso8601String(),
      };
}

class Subject {
  int? id;
  String? subject;
  String? 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(),
      };
}
