#ifndef CONFIG_H
#define CONFIG_H

// ===================== WiFi =====================
#define WIFI_SSID          "Babayana"
#define WIFI_PASS          "enakjuga"

// ===================== Static IP (PERMANENT) =====================
#define USE_STATIC_IP     1
#define STATIC_IP          192,168,1,7
#define STATIC_GATEWAY     192,168,1,1
#define STATIC_SUBNET      255,255,255,0
#define STATIC_DNS         8,8,8,8

// ===================== Backend Server =====================
// IP laptop di jaringan WiFi yang sama dengan ESP32.
// Cek ulang dengan: ipconfig -> Wireless LAN adapter Wi-Fi -> IPv4 Address
#define SERVER_HOST        "192.168.1.22"
#define SERVER_PORT        3003
#define INGEST_PATH        "/api/v1/ingest/telemetry"

// ===================== Identity =====================
#define TENANT_ID          "tenantA"
#define SITE_ID            "jakarta-utara"
#define DEVICE_ID          "BIN_001"
#define FIRMWARE_VERSION    "7.5.1"

// ===================== GPS (lokasi bin, ganti sesuai posisi asli) =====================
#define DEVICE_LAT         -6.331782
#define DEVICE_LON         106.806388

// ===================== Publish Intervals (ms) =====================
#define TELEMETRY_INTERVAL_MS  2000    // Kirim data tiap 2 detik (real-time!)
#define SENSOR_READ_INTERVAL   500     // Baca sensor tiap 500ms
#define SENSOR_STARTUP_GRACE_MS 15000UL // Jangan laporkan HC gagal saat transien boot
#define COMPUTE_INTERVAL       500     // Hitung status tiap 500ms

// ===================== Kalibrasi Bin =====================
#define EMPTY_DISTANCE_CM  48.0        // Jarak sensor ke dasar saat benar-benar kosong
#define FULL_DISTANCE_CM   10.0        // Jarak minimum aman saat dianggap penuh
#define BIN_DEPTH_CM       50.0        // Batas validasi pembacaan
#define SENSOR_OFFSET_CM   2.0

// ===================== Threshold =====================
#define THRESHOLD_FULL     80          // fill% >= 80 → FULL (LED MERAH)
#define THRESHOLD_MEDIUM   40          // fill% >= 40 → MEDIUM (LED KUNING), else EMPTY (LED HIJAU)

// ===================== Stabilizer / Calibration =====================
// Sharp IR di beberapa instalasi bisa baseline tinggi. Saat boot, firmware
// mengambil baseline otomatis dari bacaan awal, lalu perubahan mV dipetakan
// ke fill level agar gerakan/sampah lebih terasa dan tidak selalu mentok.
#define IR_DYNAMIC_RANGE_MV  180.0      // Deviasi mV dari baseline kosong sampai penuh
#define IR_DEADBAND_MV       15.0       // Noise di sekitar baseline dianggap kosong
#define IR_MIN_VALID_MV      100.0
#define IR_MIN_DISTANCE_CM   10.0f      // Rentang ukur jarak GP2Y0A21 yang dapat dipercaya
#define IR_MAX_DISTANCE_CM   80.0f
#define SENSOR_AGREEMENT_CM  25.0f      // Selisih lebih besar dilaporkan DEGRADED
#define SMOOTH_ALPHA         0.60       // Lebih responsif untuk demonstrasi tangan/sampah
#define STATUS_FULL_ON       80
#define STATUS_FULL_OFF      75
#define STATUS_MEDIUM_ON     40
#define STATUS_MEDIUM_OFF    35
#define SENSOR_FAIL_LIMIT      5

// ===================== GPIO Pins =====================
// HC-SR04 Ultrasonic
#define PIN_TRIG            5          // HC-SR04 TRIG -> GPIO5 / D5 langsung
#define PIN_ECHO           18          // HC-SR04 ECHO -> GPIO18 / D18 langsung, VCC sensor 3V3

// Sharp IR GP2Y0A21 (analog)
#define PIN_IR_ANALOG      34          // ADC1_CH6

// Traffic Light LED
#define PIN_LED_RED        25          // FULL → Merah
#define PIN_LED_YELLOW     26          // MEDIUM → Kuning
#define PIN_LED_GREEN      27          // EMPTY → Hijau

// LED Logic: 
//   0 = Common Cathode (HIGH = ON)  — LED + resistor ke GND
//   1 = Common Anode  (LOW  = ON)  — Modul traffic light, VCC shared
// PENTING: Pakai 1/0, JANGAN true/false! Preprocessor C++ tidak kenal 'true'!
#define LED_ACTIVE_LOW     0           // Modul 4-pin GND,R,Y,G: HIGH=ON

// ===================== Sensor Config =====================
#define US_SAMPLES          5          // Target ping per siklus pembacaan
#define US_MIN_VALID_READS  1          // Terima echo fisik valid pada wiring 3V3 D5/D18
#define US_MIN_CM           2.0f       // Batas fisik minimum HC-SR04
#define US_MAX_CM           400.0f     // Rentang fisik HC-SR04; > kedalaman bin berarti EMPTY
#define US_TIMEOUT_US       40000UL     // Tangkap seluruh pulsa HC-SR04, termasuk no-target ~38ms
#define US_ECHO_CLEAR_US    50000UL     // Tunggu pulsa lama selesai sebelum trigger baru
#define US_PING_GAP_MS      100         // Hindari echo ping sebelumnya terbaca kembali
#define IR_SAMPLES         9           // Jumlah sample untuk median filter IR

#endif // CONFIG_H
