// vite.config.ts
import { defineConfig, PluginOption } from "vite";
import dotenv from "dotenv";
import path from "path";
import { tr } from "element-plus/es/locales.mjs";

// 3. 加载 .env 文件（优先级：环境专属 > 公共配置）

console.log("load .env file : .env." + process.env.NODE_ENV);
console.log("load .env, BaseUrl: " + process.env.URL_BASE);

function isDebug(): boolean {
  if (process.env.NODE_ENV === "development") {
    return true;
  }

  return false;
}

interface EnvConfig {
  // 插件相关配置
  pluginName: string;
  isDebug: boolean;
  isMinify: boolean;
  logLevel: string;
  // Vite 相关配置
  port: number;
  publicPath: string;
  outDir: string;
  sourcemap: boolean;
  enableHmr: boolean;
}

const getEnvConfig = (): EnvConfig => {
  const currentEnv = process.env.NODE_ENV || "development";
  dotenv.config({
    path: path.resolve(__dirname, `.env.${currentEnv}`),
    override: true,
  });

  dotenv.config({
    path: path.resolve(__dirname, ".env"),
    override: false,
  });

  dotenv.config({
    path: path.resolve(
      process.env.PNPM_SCRIPT_SRC_DIR as string,
      `.env.${currentEnv}`
    ),
    override: true,
  });

  dotenv.config({
    path: path.resolve(process.env.PNPM_SCRIPT_SRC_DIR as string, ".env"),
    override: true,
  });

  console.log(process.env);
  console.log("load .env file : .env." + currentEnv);
  console.log("load dir : " + __dirname);
  console.log("load .env, BaseUrl: " + process.env.URL_BASE);

  return {
    // 插件相关
    pluginName: process.env.PLUGIN_NAME as string,
    isDebug: isDebug(),
    isMinify: (process.env.PLUGIN_MINIFY as string) === "true",
    logLevel: process.env.LOG_LEVEL as string,
    // Vite 相关
    port: Number(process.env.VITE_PORT as string),
    publicPath: process.env.VITE_PUBLIC_PATH as string,
    outDir: (process.env.VITE_OUT_DIR as string) || "dist",
    sourcemap: (process.env.VITE_SOURCEMAP as string) === "true",
    enableHmr: (process.env.VITE_HMR as string) === "true",
  };
};

const envConfig = getEnvConfig();

// 5. 开发环境调试插件（TypeScript 类型明确）
const devDebugPlugin = (): PluginOption => {
  return {
    name: "slidev-plugin-dev-log",
    buildStart() {
      console.log(
        `[${envConfig.pluginName}] 开发模式启动（日志级别：${envConfig.logLevel}）`
      );
      console.log(
        `[调试信息] 端口：${envConfig.port}，热更新：${envConfig.enableHmr}`
      );
    },
  };
};

export default defineConfig({
  base: envConfig.publicPath,
  plugins: [envConfig.isDebug ? devDebugPlugin() : null],

  // 开发服务器配置
  server: {
    host: "0.0.0.0",
    port: envConfig.port, //无效？
    open: envConfig.isDebug, // 开发环境自动打开浏览器
    proxy: {
      "/login": {
        //"/login": {
        target: process.env.URL_BASE, // 替换为你的后端接口基础地址（必填）
        secure: !envConfig.isDebug, // 关键：禁用 SSL 证书验证（开发环境专用）
        // target: "http://172.28.21.103",
        // secure: false,
        changeOrigin: true, // 开启跨域模拟（关键：伪装代理请求的Origin为后端域名）
        //rewrite: (path) => path.replace("/login", "/login"), // 可选：去除请求路径中的 /api 前缀（根据后端接口是否带 /api 调整）
        // 示例：若后端接口是 http://localhost:8080/user/login，前端请求 /api/user/login → 代理后变为 http://localhost:8080/user/login
        // 若后端接口是 http://localhost:8080/api/user/login，可删除 rewrite 配置
      },
      // "/*/login": {
      //   //"/login": {
      //   target: process.env.URL_BASE, // 替换为你的后端接口基础地址（必填）
      //   secure: !envConfig.isDebug, // 关键：禁用 SSL 证书验证（开发环境专用）
      //   // target: "http://172.28.21.103",
      //   // secure: false,
      //   changeOrigin: true, // 开启跨域模拟（关键：伪装代理请求的Origin为后端域名）
      //   rewrite: (path) => path.replace(/\/*\/login/, "/login"), // 可选：去除请求路径中的 /api 前缀（根据后端接口是否带 /api 调整）
      //   // 示例：若后端接口是 http://localhost:8080/user/login，前端请求 /api/user/login → 代理后变为 http://localhost:8080/user/login
      //   // 若后端接口是 http://localhost:8080/api/user/login，可删除 rewrite 配置
      // },
      // "^(.*/)?login$": {
      //   //"/login": {
      //   target: process.env.URL_BASE, // 替换为你的后端接口基础地址（必填）
      //   secure: !envConfig.isDebug, // 关键：禁用 SSL 证书验证（开发环境专用）
      //   // target: "http://172.28.21.103",
      //   // secure: false,
      //   changeOrigin: true, // 开启跨域模拟（关键：伪装代理请求的Origin为后端域名）
      //   rewrite: (path) => path.replace(/^(.*\/)?login$/, "/login"), // 可选：去除请求路径中的 /api 前缀（根据后端接口是否带 /api 调整）
      //   // 示例：若后端接口是 http://localhost:8080/user/login，前端请求 /api/user/login → 代理后变为 http://localhost:8080/user/login
      //   // 若后端接口是 http://localhost:8080/api/user/login，可删除 rewrite 配置
      // },
    },
  },
  // 生产环境打包配置（可选）
  // build: {
  //   outDir: "dist",
  //   assetsDir: "assets",
  // },
});
