// src/models/domicilio_model.dart
import 'dart:convert';
import '../data/horarios_data.dart';

class Domicilio {
  final String id;
  final String nombre;
  final String colonia;
  final String calle;
  final String numero;
  final double latitud;
  final double longitud;
  final String horarioEstimado;
  final String routeId;

  Domicilio({
    required this.id,
    required this.nombre,
    required this.colonia,
    required this.calle,
    required this.numero,
    required this.latitud,
    required this.longitud,
    required this.horarioEstimado,
    required this.routeId,
  });

  String get direccionCompleta => '$colonia, $calle $numero';

  Map<String, dynamic> toJson() => {
    'id': id,
    'nombre': nombre,
    'colonia': colonia,
    'calle': calle,
    'numero': numero,
    'latitud': latitud,
    'longitud': longitud,
    'horarioEstimado': horarioEstimado,
    'routeId': routeId,
  };

  factory Domicilio.fromJson(Map<String, dynamic> json) {
    return Domicilio(
      id: json['id'],
      nombre: json['nombre'],
      colonia: json['colonia'],
      calle: json['calle'],
      numero: json['numero'],
      latitud: (json['latitud'] as num).toDouble(),
      longitud: (json['longitud'] as num).toDouble(),
      horarioEstimado: json['horarioEstimado'] ?? getHorarioByColonia(json['colonia']),
      routeId: json['routeId'] ?? getRouteIdByColonia(json['colonia']),
    );
  }

  static String encode(List<Domicilio> domicilios) {
    return json.encode(domicilios.map((d) => d.toJson()).toList());
  }

  static List<Domicilio> decode(String domiciliosString) {
    final List<dynamic> data = json.decode(domiciliosString);
    return data.map((item) => Domicilio.fromJson(item)).toList();
  }
}