import '../models/models.dart';
import '../services/database_service.dart';
import 'basico_model.dart';

class Usuario extends Basico {
  String? nombre;
  String? apellidos;
  String? correo;
  String? celular;
  String? celularPersonal;
  int? rol;
  bool? genero;
  int? estatus;
  String? imagen;
  String? rfc;
  String? razonSocial;
  String? calle;
  String? numeroExterior;
  String? colonia;
  String? codigoPostal;
  int? idCiudad;
  int? idEstado;
  int? idSucursal;
  String? turno;
  String? clave;
  String? token;
  List<String>? permisos;
  static const VER_CATEGORIAS = 'VER_CATEGORIAS';
  static const VER_DESC_APP = 'VER_DESC_APP';
  static const VER_SUCURSALES = 'VER_SUCURSALES';
  static const VER_ADMIN = 'VER_ADMIN';
  static const CANCELAR_PEDIDO = 'CANCELAR_PEDIDO';
  static const VER_REPORTE = 'VER_REPORTE';
  static const FORZAR_SINCRONIZACION = 'FORZAR_SINCRONIZACION';

  Usuario({
    super.id,
    this.nombre,
    this.apellidos,
    this.correo,
    this.celular,
    this.celularPersonal,
    this.rol,
    this.genero,
    this.estatus,
    this.imagen,
    this.rfc,
    this.razonSocial,
    this.calle,
    this.numeroExterior,
    this.colonia,
    this.codigoPostal,
    this.idCiudad,
    this.idEstado,
    this.idSucursal,
    this.turno,
    this.clave,
    this.token,
    this.permisos,
  });

  @override
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'nombre': nombre,
      'apellidos': apellidos,
      'correo': correo,
      'celular': celular,
      'celularPersonal': celularPersonal,
      'rol': rol,
      'genero': genero != null ? (genero! ? 1 : 0) : null,
      'estatus': estatus,
      'imagen': imagen,
      'rfc': rfc,
      'razonSocial': razonSocial,
      'calle': calle,
      'numeroExterior': numeroExterior,
      'colonia': colonia,
      'codigoPostal': codigoPostal,
      'idCiudad': idCiudad,
      'idEstado': idEstado,
      'idSucursal': idSucursal,
      'turno': turno,
      'clave': clave,
      'token': token,
      'creado': creado?.toIso8601String(),
      'modificado': modificado?.toIso8601String(),
      'eliminado': eliminado?.toIso8601String(),
    }..addAll(super.toJson());
  }

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'nombre': nombre,
      'apellidos': apellidos,
      'correo': correo,
      'celular': celular,
      'celularPersonal': celularPersonal,
      'rol': rol,
      'genero': genero,
      'estatus': estatus,
      'imagen': imagen,
      'rfc': rfc,
      'razonSocial': razonSocial,
      'calle': calle,
      'numeroExterior': numeroExterior,
      'colonia': colonia,
      'codigoPostal': codigoPostal,
      'idCiudad': idCiudad,
      'idEstado': idEstado,
      'idSucursal': idSucursal,
      'turno': turno,
      'clave': clave,
      'token': token,
      'creado': creado != null ? creado!.toIso8601String() : null,
      'modificado': modificado != null ? modificado!.toIso8601String() : null,
      'eliminado': eliminado != null ? eliminado!.toIso8601String() : null,
    };
  }

  Usuario.fromJson(Map<String, dynamic> json) {
    super.parseJson(json);
    nombre = Basico.parseString(json['nombre']);
    apellidos = Basico.parseString(json['apellidos']);
    correo = Basico.parseString(json['correo']);
    celular = Basico.parseString(json['celular']);
    celularPersonal = Basico.parseString(json['celularPersonal']);
    rol = Basico.parseInt(json['rol']);
    genero = Basico.parseBolean(json['genero']);
    estatus = Basico.parseInt(json['estatus']);
    imagen = Basico.parseString(json['imagen']);
    rfc = Basico.parseString(json['rfc']);
    razonSocial = Basico.parseString(json['razonSocial']);
    calle = Basico.parseString(json['calle']);
    numeroExterior = Basico.parseString(json['numeroExterior']);
    colonia = Basico.parseString(json['colonia']);
    codigoPostal = Basico.parseString(json['codigoPostal']);
    idCiudad = Basico.parseInt(json['idCiudad']);
    idEstado = Basico.parseInt(json['idEstado']);
    idSucursal = Basico.parseInt(json['idSucursal']);
    turno = Basico.parseString(json['turno']);
    clave = Basico.parseString(json['clave']);
    token = Basico.parseString(json['token']);
  }

  Usuario.fromApi(Map<String, dynamic> json) {
    super.parseJson(json);
    nombre = Basico.parseString(json['nombre']);
    apellidos = Basico.parseString(json['apellidos']);
    correo = Basico.parseString(json['correo']);
    celular = Basico.parseString(json['celular']);
    celularPersonal = Basico.parseString(json['celularPersonal']);
    rol = Basico.parseInt(json['rol']);
    genero = Basico.parseBolean(json['genero']);
    estatus = Basico.parseInt(json['estatus']);
    imagen = Basico.parseString(json['imagen']);
    rfc = Basico.parseString(json['rfc']);
    razonSocial = Basico.parseString(json['razonSocial']);
    calle = Basico.parseString(json['calle']);
    numeroExterior = Basico.parseString(json['numeroExterior']);
    colonia = Basico.parseString(json['colonia']);
    codigoPostal = Basico.parseString(json['codigoPostal']);
    idCiudad = Basico.parseInt(json['idCiudad']);
    idEstado = Basico.parseInt(json['idEstado']);
    idSucursal = Basico.parseInt(json['idSucursal']);
    turno = Basico.parseString(json['turno']);
    clave = Basico.parseString(json['clave']);
    token = Basico.parseString(json['token']);
    permisos = (json['permisos'] as List).map((e) => e.toString()).toList();
  }

  Future<void> guardar() async {
    idLocal = await DatabaseService().guardar(this);
  }
}
