import '../models/user_model.dart';
import '../services/auth_service.dart';

/// Repository untuk fitur Autentikasi.
/// Berfungsi sebagai lapisan abstraksi antara State Notifier (Presentation Layer) dan Klien Layanan API/Supabase (Service Layer).
/// Menangani pembersihan input (*input cleaning/trimming*) dan meneruskan panggilan ke service autentikasi yang sesuai.
class AuthRepository {
  final AuthService _service;

  AuthRepository(this._service);

  /// Masuk log (login) ke dalam sistem menggunakan email dan password.
  /// Menghapus spasi berlebih pada awal/akhir email dan password sebelum diteruskan ke API/Supabase.
  Future<UserModel> login(String email, String password) {
    return _service.login(email.trim(), password.trim());
  }

  /// Mendaftarkan (register) akun pengguna baru ke sistem.
  /// Menghapus spasi berlebih pada nama, email, dan password.
  Future<UserModel> register(String name, String email, String password) {
    return _service.register(name.trim(), email.trim(), password.trim());
  }

  /// Menghubungkan akun pengguna dengan perangkat IoT ESP32 menggunakan kode klaim (*claim code*).
  /// Mengembalikan String berupa `device_id` yang berhasil terhubung.
  Future<String> claimDevice(String userId, String claimCode) {
    return _service.claimDevice(userId, claimCode.trim());
  }

  /// Keluar dari akun pengguna (logout) dan menghapus token sesi.
  Future<void> logout() {
    return _service.logout();
  }

  /// Memeriksa apakah ada sesi login aktif yang masih valid di memori lokal perangkat.
  /// Digunakan untuk proses Auto-Login ketika aplikasi pertama kali dibuka.
  Future<UserModel?> checkSession() {
    return _service.checkSession();
  }
}
