/**
 ******************************************************************************
 * @file    tcp_json_srv.h
 * @author  wangfq
 * @version V1.0
 * @date    2026-06-30
 * @brief   TCP JSON protocol server — DLD960 TCP JSON protocol handler
 *          Port 5960, line-delimited JSON, auth + command dispatch
 ******************************************************************************
 */
#ifndef __TCP_JSON_SRV_H__
#define __TCP_JSON_SRV_H__

#include <stdint.h>

/*===========================================================================
 * Protocol Constants
 *===========================================================================*/
#define TCP_JSON_PORT               5960          // TCP JSON protocol default port
#define TCP_JSON_MAX_FRAME          4096          // Max JSON frame length
#define TCP_JSON_AUTH_TIMEOUT_MS    60000         // 60s auth timeout (ms)
#define TCP_JSON_RECV_BUF_LEN       (TCP_JSON_MAX_FRAME * 2)
#define TCP_JSON_MAX_PWD_RETRY      3             // Max password retries before lockout
#define TCP_JSON_LOCKOUT_TIMEOUT_MS 60000         // 60s lockout after max retries

/*===========================================================================
 * Auth / State
 *===========================================================================*/
typedef enum {
    JSON_STATE_WAIT_AUTH = 0,          // Waiting for pwd_verify
    JSON_STATE_AUTHED,                 // Authenticated, commands accepted
    JSON_STATE_LOCKOUT                // Locked out (max retries exceeded)
} TcpJsonAuthState;

/*===========================================================================
 * Error Codes
 *===========================================================================*/
#define JSON_CODE_SUCCESS            0
#define JSON_CODE_PARAM_ERR          1
#define JSON_CODE_AUTH_FAIL          2
#define JSON_CODE_BUSY               3
#define JSON_CODE_UNSUPPORTED        4
#define JSON_CODE_INTERNAL_ERR       5
#define JSON_CODE_DATA_TOO_LONG      6
#define JSON_CODE_NOT_AUTHED         7

/*===========================================================================
 * Pending Loop MCU Command Response (deferred)
 *===========================================================================*/
typedef struct {
    uint8_t  active;         // 1 = pending response
    uint8_t  socket;         // TCP socket to reply to
    uint32_t msg_id;         // Original msg_id
    char     cmd[32];        // Original command string
    uint32_t deadline;       // ms deadline for timeout
} TcpJsonPending;

/*===========================================================================
 * Externs
 *===========================================================================*/
extern uint8_t  g_json_socket_listen;    // TCP socket ID (listen + data)
extern TcpJsonAuthState g_json_auth_state;
extern uint32_t g_json_auth_timer;       // ms timer for auth timeout
extern uint8_t  g_json_pwd_retry;        // password retry counter
extern TcpJsonPending g_json_pending;    // Pending Loop MCU command state

/*===========================================================================
 * API
 *===========================================================================*/
void  tcp_json_srv_init(void);                  // Create listen socket on port 5960
void  tcp_json_handle_sock_int(uint8_t socketid, uint8_t intstat);  // Socket interrupt handler
void  tcp_json_poll(void);                      // Periodic poll (auth timeout, etc.)
void  tcp_json_push_sensor(void);               // Push sensor data (0xC0) to TCP client

#endif /* __TCP_JSON_SRV_H__ */
