import 'models.dart';

class Pedido extends Basico {
  int? folio;
  String? estatus;
  String? comentarios;
  String? peticion;
  String? nombreCliente;
  double? totalPedido;
  int? descuento;
  int? idCliente;
  int? idMesa;
  String? terminado;
  int? cerrar;
  int? idUsuario;
  int? idModificador;
  int? idCancelado;
  String? tipoPago;
  double? cantEfectivo;
  double? cantTarjeta;
  double? cantTransferencia;
  List<PedidoProducto> productos = [];
  int? idWeb;
  String? uuid;
  String? idCorteCaja;
  List<Propinas> propinas = [];

  String? sincronizado;

  Pedido({
    super.id,
    this.folio,
    this.estatus,
    this.comentarios,
    this.peticion,
    this.nombreCliente,
    this.totalPedido,
    this.descuento,
    this.idCliente,
    this.idMesa,
    this.terminado,
    this.cerrar,
    this.idUsuario,
    this.idModificador,
    this.idCancelado,
    this.tipoPago,
    this.cantEfectivo,
    this.cantTarjeta,
    this.cantTransferencia,
    this.productos = const [],
    this.idWeb,
    this.sincronizado,
    this.uuid,
    this.idCorteCaja,
  });

  @override
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'folio': folio,
      'estatus': estatus,
      'comentarios': comentarios,
      'peticion': peticion,
      'nombreCliente': nombreCliente,
      'totalPedido': totalPedido,
      'descuento': descuento,
      'idCliente': idCliente,
      'idMesa': idMesa,
      'terminado': terminado,
      'cerrar': cerrar,
      'idUsuario': idUsuario,
      'idModificador': idModificador,
      'idCancelado': idCancelado,
      'tipoPago': tipoPago,
      'cantEfectivo': cantEfectivo,
      'cantTarjeta': cantTarjeta,
      'cantTransferencia': cantTransferencia,
      'sincronizado': sincronizado,
      'idWeb': idWeb,
      'uuid': uuid,
      'idCorteCaja': idCorteCaja,
    }..addAll(super.toJson());
  }

  Map<String, dynamic> toApi() {
    idLocal = id;

    Map<String, dynamic> apiMap = {
      'idLocal': idLocal,
      'folio': folio,
      'estatus': estatus,
      'comentarios': comentarios,
      'nombreCliente': nombreCliente,
      'creado': peticion,
      'idUsuario': idUsuario,
      'tipoPago': tipoPago,
      'totalPedido': totalPedido,
      'descuento': descuento,
      'cantEfectivo': cantEfectivo,
      'cantTarjeta': cantTarjeta,
      'cantTransferencia': cantTransferencia,
      'idMesa': idMesa,
      'uuid': uuid,
      'idCorteCaja': idCorteCaja,
      'productos': productos.map((producto) => producto.toApi()).toList(),
      'propinas': propinas.map((propina) => propina.toApi()).toList(),
    };
    Map<String, dynamic> basicoMap = super.toJson();
    basicoMap.remove('id');
    basicoMap.remove('eliminado');
    apiMap.addAll(basicoMap);

    return apiMap;
  }

  Pedido.fromJson(Map<String, dynamic> json) {
    super.parseJson(json);
    id = (json['id'] as int?)!;
    folio = Basico.parseInt(json['folio']);
    estatus = Basico.parseString(json['estatus']);
    comentarios = Basico.parseString(json['comentarios']);
    peticion = Basico.parseString(json['peticion']);
    nombreCliente = Basico.parseString(json['nombreCliente']);
    totalPedido = Basico.parseDouble(json['totalPedido']);
    descuento = Basico.parseInt(json['descuento']);
    idCliente = Basico.parseInt(json['idCliente']);
    idMesa = Basico.parseInt(json['idMesa']);
    terminado = Basico.parseString(json['terminado']);
    cerrar = Basico.parseInt(json['cerrar']);
    idUsuario = Basico.parseInt(json['idUsuario']);
    idModificador = Basico.parseInt(json['idModificador']);
    idCancelado = Basico.parseInt(json['idCancelado']);
    tipoPago = Basico.parseString(json['tipoPago']);
    cantEfectivo = Basico.parseDouble(json['cantEfectivo']);
    cantTarjeta = Basico.parseDouble(json['cantTarjeta']);
    cantTransferencia = Basico.parseDouble(json['cantTransferencia']);
    uuid = Basico.parseString(json['uuid']);
    idWeb = Basico.parseInt(json['idWeb']);
    sincronizado = Basico.parseString(json['sincronizado']);
    idCorteCaja = Basico.parseString(json['idCorteCaja']);

    List<PedidoProducto> _productos = [];
    if (json["productos"] != null && (json["productos"] as List).isNotEmpty) {
      for (var i in (json["productos"] as List)) {
        PedidoProducto m = PedidoProducto.fromJson(i);
        _productos.add(m);
      }
    }
    productos = _productos;

    if (json["propinas"] != null && (json["propinas"] as List).isNotEmpty) {
      propinas = (json["propinas"] as List)
          .map((item) => Propinas.fromJson(item))
          .toList();
    }
  }
}
