import 'package:supabase_flutter/supabase_flutter.dart';

final supabaseClient = Supabase.instance.client;

class RutasService {
  final SupabaseClient _client = supabaseClient;

  // ── Obtener ruta por ID ──
  Future<Map<String, dynamic>?> obtenerRuta(String routeId) async {
    try {
      final response = await _client
          .from('rutas')
          .select('*')
          .eq('id', routeId)
          .single();
      return response;
    } catch (e) {
      print('Error obtener_ruta: $e');
      return null;
    }
  }

  // ── Obtener puntos de ruta ──
  Future<List<Map<String, dynamic>>> obtenerPuntosRuta(String routeId) async {
    try {
      final response = await _client
          .from('puntos_ruta')
          .select('*')
          .eq('ruta_id', routeId)
          .order('orden');
      return response;
    } catch (e) {
      print('Error obtener_puntos_ruta: $e');
      return [];
    }
  }

  // ── Obtener truck status ──
  Future<Map<String, dynamic>?> obtenerTruckStatus(String routeId) async {
    try {
      final response = await _client
          .from('truck_status')
          .select('*')
          .eq('route_id', routeId)
          .single();
      return response;
    } catch (e) {
      print('Error obtener_truck_status: $e');
      return null;
    }
  }

  // ── Obtener template de notificación ──
  Future<Map<String, dynamic>?> obtenerTemplate(String triggerEvent) async {
    try {
      final response = await _client
          .from('notification_templates')
          .select('*')
          .eq('trigger_event', triggerEvent)
          .single();
      return response;
    } catch (e) {
      print('Error obtener_template: $e');
      return null;
    }
  }

  // ── Obtener preferencias de usuario ──
  Future<Map<String, dynamic>?> obtenerPreferencias(String userId) async {
    try {
      final response = await _client
          .from('notification_preferences')
          .select('*')
          .eq('user_id', userId)
          .single();
      return response;
    } catch (e) {
      print('Error obtener_preferencias: $e');
      return null;
    }
  }

  // ── Obtener dirección de usuario ──
  Future<Map<String, dynamic>?> obtenerDireccion(int addressId) async {
    try {
      final response = await _client
          .from('addresses')
          .select('*')
          .eq('id', addressId)
          .single();
      return response;
    } catch (e) {
      print('Error obtener_direccion: $e');
      return null;
    }
  }

  // ── Guardar notificación ──
  Future<void> guardarNotificacion({
    required String tipo,
    required String routeId,
    required int addressId,
    required String mensaje,
    int? etaMinutos,
  }) async {
    try {
      await _client.from('notificaciones').insert({
        'tipo': tipo,
        'ruta_id': routeId,
        'address_id': addressId,
        'mensaje': mensaje,
        'eta_minutos': etaMinutos,
        'creada_en': DateTime.now().toIso8601String(),
      });
    } catch (e) {
      print('Error guardar_notificacion: $e');
    }
  }
}
