/*
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: CC0-1.0
 */

#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>

#include "err_code.h"
#include "events/ui_mgmt.h"
#include "flash_drv.h"
#include "i2c_master.h"
#include "i2c_mcu.h"
#include "lcd_panel_mgmt.h"
#include "log.h"
#include "modbus_rtu_slave.h"
#include "output_control.h"
#include "parameter.h"
#include "rtc_aip8563.h"
#include "system_control.h"
#include "ui_app.h"
#include "ui_events.h"

static const char* TAG = "example";
#if CONFIG_CHIP_DUAL_CORE
static uint8_t const task_core_num = 1;
#else
static uint8_t const task_core_num = 0;
#endif

void app_main(void) {
  lcd_panel_ui_server_init(task_core_num);
  ui_events_server_init(task_core_num);
  UITaskCreat();

  // printf("=== SAS965PIT-EC 系统启动 ===\n");

  // 1. 初始化flash和参数
  FlashInit();
  InitParam();
  vTaskDelay(pdMS_TO_TICKS(100));

  // 2. 启动Modbus RTU从机任务（无I2C依赖）
  modbus_rtu_slave_init();
  vTaskDelay(pdMS_TO_TICKS(100));

  // 3. I2C总线初始化（关键步骤）
  i2c_master_init();
  vTaskDelay(pdMS_TO_TICKS(100));

  // 4. RTC初始化（I2C设备，但相对稳定）
  rtc_aip8563_init();

  // 5. MCU通信初始化（最关键的I2C设备）
  vTaskDelay(pdMS_TO_TICKS(1200));  // 等待MCU稳定
  i2c_mcu_init();

  // 6. 初始温度读取（移除）

  // 7. 初始化温控输出模块
  // vTaskDelay(pdMS_TO_TICKS(100));
  output_control_init();

  // 8. 初始化系统控制模块
  // vTaskDelay(pdMS_TO_TICKS(50));
  system_control_init();

  // 9. 延迟启动系统控制任务，避免与I2C初始化冲突
  // vTaskDelay(pdMS_TO_TICKS(50));
  system_control_start();

  programme_init();

  // printf("系统初始化完成，系统控制任务已启动\n");

  // 6. 主线程完成初始化后，让出控制权给FreeRTOS调度器
  // 背光初始化已在system_control_init()中完成
  // 不再需要while循环，系统控制逻辑由独立任务处理
  // LVGL可以在主线程正常运行，不会被阻塞
}
