package top.gtb520.java.pve_back_api;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import top.gtb520.java.pve_back_api.config.AppConfig;
import top.gtb520.java.pve_back_api.config.ConfigManager;

import java.util.Collection;
import java.util.Collections;

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        System.out.println("=== PVE后端API服务启动 ===");

        // 初始化配置系统
        initializeConfiguration();

        // 执行初始化
        Main main = new Main();
        main.postInitialization();

        // 启动Spring Boot应用
        SpringApplication app = new SpringApplication(Main.class);
        app.setDefaultProperties(Collections.singletonMap("server.port", AppConfig.HTTP_PORT));
        app.run(args);
        System.out.println("Spring框架加载完成!");
    }

    /**
     * 初始化配置系统
     */
    private static void initializeConfiguration() {
        try {
            String configPath = ConfigManager.initializeConfig();
            if (configPath != null) {
                System.out.println("配置系统初始化成功: " + configPath);

                // 验证配置完整性
                if (!AppConfig.validateRequiredConfig()) {
                    System.err.println("警告: 必要配置项不完整，请检查配置文件");
                }
            } else {
                System.err.println("配置系统初始化失败!");
                // 使用默认配置继续运行
                AppConfig.markAsLoaded();
            }
        } catch (Exception e) {
            System.err.println("配置初始化异常: " + e.getMessage());
            e.printStackTrace();
            // 即使配置失败也继续启动应用
            AppConfig.markAsLoaded();
        }
    }

    /**
     * 应用启动后的初始化工作
     */
    public void postInitialization() {
        System.out.println("=== 应用初始化 ===");

        if (AppConfig.isConfigLoaded()) {
            System.out.println("配置状态: 已加载");

            // 显示关键配置信息
            System.out.println("服务地址: " + AppConfig.HTTP_IP + ":" + AppConfig.HTTP_PORT);
            System.out.println("PVE地址: " + AppConfig.PVE_URL);

            // 可以在这里添加其他初始化逻辑
            performAdditionalInitialization();
        } else {
            System.out.println("配置状态: 未加载，使用默认配置");
        }

        System.out.println("应用初始化完成!");
    }

    /**
     * 执行额外的初始化任务
     */
    private void performAdditionalInitialization() {
        // 这里可以添加数据库连接测试、PVE连接验证等
        try {
            // 示例：测试数据库连接配置
            if (AppConfig.MYSQL_JDBC != null && !AppConfig.MYSQL_JDBC.isEmpty()) {
                System.out.println("数据库配置已设置");
            }

            // 示例：测试PVE配置
            if (AppConfig.PVE_URL != null && !AppConfig.PVE_URL.isEmpty()) {
                System.out.println("PVE配置已设置");
            }

        } catch (Exception e) {
            System.err.println("初始化检查时发生错误: " + e.getMessage());
        }
    }
}
