import '../models/sensor_model.dart';
import '../services/iot_service.dart';
import '../services/api_iot_service.dart'; // import api service untuk case khusus

/// Repository IoT — lapisan jembatan antara State Notifier (Presentation Layer) dan Layanan API Hardware (Service Layer).
/// Menyediakan data sensor real-time serta agregasi riwayat sensor (per jam / harian).
class IotRepository {
  final IotService _service;

  IotRepository(this._service);

  /// Mengambil data status sensor real-time terbaru dari hardware.
  Future<SensorModel> getSensorData() {
    return _service.fetchSensorData();
  }

  /// Mengambil data riwayat sensor mentah (history) untuk grafik.
  /// Hanya dieksekusi jika tipe service yang terpasang adalah [ApiIotService].
  Future<List<SensorModel>> getHistoryData() {
    if (_service is ApiIotService) {
      return _service.fetchHistory();
    }
    return Future.value([]);
  }

  /// Mengambil data agregasi riwayat sensor harian (rata-rata per hari) untuk grafik bulanan.
  /// [days] menentukan berapa hari ke belakang data yang akan diambil (default: 30 hari).
  Future<List<Map<String, dynamic>>> getDailyHistory({int days = 30}) {
    if (_service is ApiIotService) {
      return _service.fetchDailyHistory(days: days);
    }
    return Future.value([]);
  }

  /// Mengambil data agregasi riwayat sensor per jam (rata-rata per jam) untuk grafik harian.
  /// [days] menentukan rentang hari ke belakang data yang diambil (default: 7 hari).
  Future<List<Map<String, dynamic>>> getHourlyHistory({int days = 7}) {
    if (_service is ApiIotService) {
      return _service.fetchHourlyHistory(days: days);
    }
    return Future.value([]);
  }

  /// Mengambil status keaktifan perangkat (is_online, last_seen) dari database.
  Future<Map<String, dynamic>> getDeviceStatus() {
    if (_service is ApiIotService) {
      return _service.fetchDeviceStatus();
    }
    return Future.value({'is_online': false, 'last_seen': null});
  }
}
