/* =============================================================================
 * app_config.h - SHT30 온습도 모니터링 STM32F407 펌웨어 공통 설정 (컴파일 타임)
 *
 * 이 헤더는 SHT30 온습도 보드의 네트워크/API/주기/핀 설정을 담는다.
 * 운영 비밀값(API_KEY 등)은 secrets.h 로 분리한다(저장소 미포함).
 * 보드 식별값(device_id 등)은 board_config.h 에서 BOARD_* 매크로로 정의한다.
 *
 * RPi config.py 대응:
 *   API_URL/API_KEY        -> APP_API_HOST/APP_API_PATH/secrets.h:APP_API_KEY
 *   REPORT_INTERVAL        -> APP_SHT30_REPORT_INTERVAL_SEC
 *   HTTP_TIMEOUT/RETRY     -> APP_HTTP_*_*
 * ===========================================================================*/
#ifndef APP_CONFIG_H
#define APP_CONFIG_H

/* ── 펌웨어 버전 (서버로 보고하는 app_version 필드) ───────────────────────── */
#define APP_VERSION                 "v2606-sht30"

/* ── 서버 API (Cafe24 PHP, HTTPS) ───────────────────────────────────────── */
/* 서버 호스트명. TLS SNI 및 HTTP Host 헤더, 인증서 CN/SAN 검증에 사용된다. */
#ifndef APP_API_HOST
#define APP_API_HOST                "your-domain.example"
#endif
#ifndef APP_API_PORT
#define APP_API_PORT                443
#endif
/* sensor_data.php 경로 (서버 디렉터리 구조에 맞게 조정) */
#ifndef APP_API_PATH
#define APP_API_PATH                "/raspi_leck_detecter/api/sensor_data.php"
#endif

/* ── 주기/타이밍 (초) ───────────────────────────────────────────────────── */
/* SHT30 측정/보고 주기 (sht30_monitor.py: 기본 300초, 최소 30초) */
#define APP_SHT30_REPORT_INTERVAL_SEC    300u

/* ── HTTP/네트워크 재시도 (config.py HTTP_*_*) ──────────────────────────── */
#define APP_HTTP_TIMEOUT_MS            10000u   /* 단일 요청 타임아웃 */
#define APP_HTTP_RETRY_COUNT              3u    /* 재시도 횟수 */
#define APP_HTTP_RETRY_DELAY_MS         5000u   /* 재시도 간 대기 */

/* ── 시간 동기 (SNTP) — TLS 인증서 유효기간/timestamp 필드에 필수 ────────── */
#define APP_SNTP_SERVER               "pool.ntp.org"
#define APP_SNTP_RETRY_DELAY_MS        15000u

/* ── 네트워크 주소 지정 ─────────────────────────────────────────────────── */
/* 1 = DHCP 우선(실패 시 아래 static fallback), 0 = static 고정 */
#define APP_NET_USE_DHCP                  1
#define APP_NET_DHCP_TIMEOUT_MS        20000u
/* static fallback (DHCP 실패 또는 APP_NET_USE_DHCP=0 일 때) */
#define APP_NET_STATIC_IP             "192.168.0.50"
#define APP_NET_STATIC_NETMASK        "255.255.255.0"
#define APP_NET_STATIC_GW             "192.168.0.1"
#define APP_NET_STATIC_DNS            "8.8.8.8"

/* ── 워치독 (IWDG) ──────────────────────────────────────────────────────── */
#define APP_WATCHDOG_TIMEOUT_MS        20000u   /* 이 시간 내 refresh 없으면 리셋 */

/* ── 디버그 로그 UART (USART3: PD8 TX / PD9 RX) ──────────────────────────
 * 주의: PA2/PA3 는 LAN8720 RMII(ETH_MDIO 등)와 충돌하므로 로그 UART 로 쓸 수 없다.
 * 따라서 ST-Link VCP(PA2/PA3) 대신 USART3 PD8/PD9 를 사용한다. HARDWARE.md 참조. */
#define APP_LOG_UART_BAUD             115200u

/* ── SHT30 보드: I2C 설정 (board_sht30) ─────────────────────────────────── */
#define APP_SHT30_I2C_ADDR            0x44u      /* 7-bit 주소 */
/* 센서 plausibility 범위 (벗어나면 metric_status="out_of_range").
 * 주의: 운영 경보 임계(고온/저온/고습/저습 → SMS)는 서버(php/config.php 의
 *       METRIC_* 상수)에서 판정한다. 폐쇄망에서 임계값을 바꿀 때 펌웨어 재플래시가
 *       불필요하도록, 펌웨어는 측정 원값만 보고하고 아래 범위는 센서 물리/타당성
 *       한계로만 사용한다. */
#define APP_SHT30_TEMP_LOW_C          (-40.0)
#define APP_SHT30_TEMP_HIGH_C         (125.0)
#define APP_SHT30_RH_LOW              (0.0)
#define APP_SHT30_RH_HIGH             (100.0)

/* 운영 비밀값/보드 식별 */
#include "secrets.h"
#include "board_config.h"

#endif /* APP_CONFIG_H */
