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

enum EstadoPedido {
  disponible,
  surtida,
  preparacion,
  cobrado,
}

class Mesa extends Basico {
  int? idSucursal;
  String? nombre;
  String? clave;
  String? posicion;
  bool? activa;
  EstadoPedido? estado;

  Mesa(
      {super.id,
      super.idLocal,
      this.idSucursal,
      this.nombre,
      this.clave,
      this.posicion,
      this.activa,
      this.estado = EstadoPedido.disponible,
      super.creado,
      super.modificado,
      super.eliminado});

  @override
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'idSucursal': idSucursal ?? 0,
      'nombre': nombre ?? '',
      'clave': clave ?? '',
      'posicion': posicion ?? '',
      'activa': activa == true ? 1 : 0,
      'creado': creado?.toIso8601String(),
      'modificado': modificado?.toIso8601String(),
      'eliminado': eliminado?.toIso8601String(),
    }..addAll(super.toJson());
  }

  Map<String, dynamic> toMap() {
    return {
      'id': id,
      'idSucursal': idSucursal ?? 0,
      'nombre': nombre ?? '',
      'clave': clave ?? '',
      'posicion': posicion ?? '',
      'activa': (activa == true) ? 1 : 0,
      'creado': creado?.toIso8601String(),
      'modificado': modificado?.toIso8601String(),
      'eliminado': eliminado?.toIso8601String(),
    };
  }

  static Mesa fromMap(Map<String, dynamic> map) {
    // Ejemplo de parseo, usando tu Basico.parseInt, etc. si gustas:
    final mesa = Mesa(
      id: map['id'] as int,
      idSucursal: map['idSucursal'] as int?,
      nombre: map['nombre'] as String?,
      clave: map['clave'] as String?,
      posicion: map['posicion'] as String?,
      activa: (map['activa'] == 1),
    );
    return mesa;
  }

  Mesa.fromJson(Map<String, dynamic> json) {
    super.parseJson(json);
    idSucursal = Basico.parseInt(json['idSucursal']);
    nombre = Basico.parseString(json['nombre']);
    clave = Basico.parseString(json['clave']);
    posicion = Basico.parseString(json['posicion']);
    activa = Basico.parseInt(json['activa']) == 1;
  }

  Mesa.fromApi(Map<String, dynamic> json) {
    super.parseJson(json);
    idSucursal = Basico.parseInt(json['idSucursal']);
    nombre = Basico.parseString(json['nombre']);
    clave = Basico.parseString(json['clave']);
    posicion = Basico.parseString(json['posicion']);
    if (json['activo'] is bool) {
      activa = json['activo'];
    } else {
      activa = Basico.parseInt(json['activo']) == 1;
    }
    creado = Basico.parseDate(json['creado']);
    modificado = Basico.parseDate(json['modificado']);
    eliminado = Basico.parseDate(json['eliminado']);
  }

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