import 'package:flux/features/tasks/models/reminder_default_model.dart';
import 'package:get_it/get_it.dart';
import 'package:supabase_flutter/supabase_flutter.dart';

class SettingsRepository {
  final _supabase = GetIt.I.get<SupabaseClient>();

  // --- PREFERENZE REMINDER ---

  /// Legge i default dell'utente corrente
  Future<List<ReminderDefaultModel>> getMyReminderDefaults({
    required String companyId,
    required String staffId,
  }) async {
    try {
      final response = await _supabase
          .from('staff_task_reminder_defaults')
          .select()
          .eq('company_id', companyId)
          .eq('staff_id', staffId)
          .order('minutes_before', ascending: true);

      return (response as List)
          .map((map) => ReminderDefaultModel.fromMap(map))
          .toList();
    } catch (e) {
      throw Exception('Errore nel caricamento delle preferenze notifiche: $e');
    }
  }

  /// Aggiunge una nuova regola (es. Push 15 min prima)
  Future<ReminderDefaultModel> addReminderDefault(
    ReminderDefaultModel reminder,
  ) async {
    try {
      final response = await _supabase
          .from('staff_task_reminder_defaults')
          .insert(reminder.toMap())
          .select()
          .single();

      return ReminderDefaultModel.fromMap(response);
    } catch (e) {
      // Catturiamo l'errore UNIQUE se l'utente prova ad aggiungere due volte la stessa identica regola
      if (e is PostgrestException && e.code == '23505') {
        throw Exception('Hai già impostato questo identico promemoria.');
      }
      throw Exception('Errore salvataggio promemoria: $e');
    }
  }

  /// Elimina una regola
  Future<void> deleteReminderDefault(String reminderId) async {
    try {
      await _supabase
          .from('staff_task_reminder_defaults')
          .delete()
          .eq('id', reminderId);
    } catch (e) {
      throw Exception('Errore durante l\'eliminazione: $e');
    }
  }
}
