// To parse this JSON data, do
//
//     final user = userFromJson(jsonString);

import 'dart:convert';

User userFromJson(String str) => User.fromJson(json.decode(str));

String userToJson(User data) => json.encode(data.toJson());

class User {
  User({
    this.totalItemsCount,
    this.data,
    this.messageStatus,
    this.message,
  });

  dynamic totalItemsCount;
  UserData? data;
  int? messageStatus;
  String? message;

  factory User.fromJson(Map<String, dynamic> json) => User(
    totalItemsCount: json["totalItemsCount"],
    data: json["data"] == null ? null : UserData.fromJson(json["data"]),
    messageStatus: json["messageStatus"] == null ? null : json["messageStatus"],
    message: json["message"] == null ? null : json["message"],
  );

  Map<String, dynamic> toJson() => {
    "totalItemsCount": totalItemsCount,
    "data": data == null ? null : data!.toJson(),
    "messageStatus": messageStatus == null ? null : messageStatus,
    "message": message == null ? null : message,
  };
}

class UserData {
  UserData({
    this.accessToken,
    this.refreshToken,
    this.expiryDate,
    this.userInfo,
  });

  String? accessToken;
  String? refreshToken;
  DateTime? expiryDate;
  UserInfo? userInfo;

  factory UserData.fromJson(Map<String, dynamic> json) => UserData(
    accessToken: json["accessToken"] == null ? null : json["accessToken"],
    refreshToken: json["refreshToken"] == null ? null : json["refreshToken"],
    expiryDate: json["expiryDate"] == null ? null : DateTime.parse(json["expiryDate"]),
    userInfo: json["userInfo"] == null ? null : UserInfo.fromJson(json["userInfo"]),
  );

  Map<String, dynamic> toJson() => {
    "accessToken": accessToken == null ? null : accessToken,
    "refreshToken": refreshToken == null ? null : refreshToken,
    "expiryDate": expiryDate == null ? null : expiryDate!.toIso8601String(),
    "userInfo": userInfo == null ? null : userInfo!.toJson(),
  };
}

class UserInfo {
  UserInfo({
    this.id,
    this.userId,
    this.firstName,
    this.lastName,
    this.mobileNo,
    this.email,
    this.userImageUrl,
    this.roleId,
    this.roleName,
    this.isEmailVerified,
    this.serviceProviderBranch,
    this.isVerified,
    this.userRoles,
    this.isCustomer,
    this.isProviderDealership,
    this.isDealershipUser,
    this.providerId,
    this.customerId,
    this.dealershipId,
  });

  int? id;
  String? userId;
  String? firstName;
  String? lastName;
  String? mobileNo;
  String? email;
  dynamic userImageUrl;
  int? roleId;
  String? roleName;
  bool? isEmailVerified;
  List<dynamic>? serviceProviderBranch;
  bool? isVerified;
  List<dynamic>? userRoles;
  bool? isCustomer;
  bool? isProviderDealership;
  bool? isDealershipUser;
  dynamic providerId;
  int? customerId;
  dynamic dealershipId;

  factory UserInfo.fromJson(Map<String, dynamic> json) => UserInfo(
    id: json["id"] == null ? null : json["id"],
    userId: json["userID"] == null ? null : json["userID"],
    firstName: json["firstName"] == null ? null : json["firstName"],
    lastName: json["lastName"] == null ? null : json["lastName"],
    mobileNo: json["mobileNo"] == null ? null : json["mobileNo"],
    email: json["email"] == null ? null : json["email"],
    userImageUrl: json["userImageUrl"],
    roleId: json["roleID"] == null ? null : json["roleID"],
    roleName: json["roleName"] == null ? null : json["roleName"],
    isEmailVerified: json["isEmailVerified"] == null ? null : json["isEmailVerified"],
    serviceProviderBranch: json["serviceProviderBranch"] == null ? null : List<dynamic>.from(json["serviceProviderBranch"].map((x) => x)),
    isVerified: json["isVerified"] == null ? null : json["isVerified"],
    userRoles: json["userRoles"] == null ? null : List<dynamic>.from(json["userRoles"].map((x) => x)),
    isCustomer: json["isCustomer"] == null ? null : json["isCustomer"],
    isProviderDealership: json["isProviderDealership"] == null ? null : json["isProviderDealership"],
    isDealershipUser: json["isDealershipUser"] == null ? null : json["isDealershipUser"],
    providerId: json["providerID"],
    customerId: json["customerID"] == null ? null : json["customerID"],
    dealershipId: json["dealershipID"],
  );

  Map<String, dynamic> toJson() => {
    "id": id == null ? null : id,
    "userID": userId == null ? null : userId,
    "firstName": firstName == null ? null : firstName,
    "lastName": lastName == null ? null : lastName,
    "mobileNo": mobileNo == null ? null : mobileNo,
    "email": email == null ? null : email,
    "userImageUrl": userImageUrl,
    "roleID": roleId == null ? null : roleId,
    "roleName": roleName == null ? null : roleName,
    "isEmailVerified": isEmailVerified == null ? null : isEmailVerified,
    "serviceProviderBranch": serviceProviderBranch == null ? null : List<dynamic>.from(serviceProviderBranch!.map((x) => x)),
    "isVerified": isVerified == null ? null : isVerified,
    "userRoles": userRoles == null ? null : List<dynamic>.from(userRoles!.map((x) => x)),
    "isCustomer": isCustomer == null ? null : isCustomer,
    "isProviderDealership": isProviderDealership == null ? null : isProviderDealership,
    "isDealershipUser": isDealershipUser == null ? null : isDealershipUser,
    "providerID": providerId,
    "customerID": customerId == null ? null : customerId,
    "dealershipID": dealershipId,
  };
}
