// 用于迁移检测的旧键，该文件下个版本会删除

package controller

import (
    "encoding/json"
    "net/http"
    "one-api/common"
    "one-api/model"
    "github.com/gin-gonic/gin"
)

// MigrateConsoleSetting 迁移旧的控制台相关配置到 console_setting.*
func MigrateConsoleSetting(c *gin.Context) {
    // 读取全部 option
    opts, err := model.AllOption()
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"success": false, "message": err.Error()})
        return
    }
    // 建立 map
    valMap := map[string]string{}
    for _, o := range opts {
        valMap[o.Key] = o.Value
    }

    // 处理 APIInfo
    if v := valMap["ApiInfo"]; v != "" {
        var arr []map[string]interface{}
        if err := json.Unmarshal([]byte(v), &arr); err == nil {
            if len(arr) > 50 {
                arr = arr[:50]
            }
            bytes, _ := json.Marshal(arr)
            model.UpdateOption("console_setting.api_info", string(bytes))
        }
        model.UpdateOption("ApiInfo", "")
    }
    // Announcements 直接搬
    if v := valMap["Announcements"]; v != "" {
        model.UpdateOption("console_setting.announcements", v)
        model.UpdateOption("Announcements", "")
    }
    // FAQ 转换
    if v := valMap["FAQ"]; v != "" {
        var arr []map[string]interface{}
        if err := json.Unmarshal([]byte(v), &arr); err == nil {
            out := []map[string]interface{}{}
            for _, item := range arr {
                q, _ := item["question"].(string)
                if q == "" {
                    q, _ = item["title"].(string)
                }
                a, _ := item["answer"].(string)
                if a == "" {
                    a, _ = item["content"].(string)
                }
                if q != "" && a != "" {
                    out = append(out, map[string]interface{}{"question": q, "answer": a})
                }
            }
            if len(out) > 50 {
                out = out[:50]
            }
            bytes, _ := json.Marshal(out)
            model.UpdateOption("console_setting.faq", string(bytes))
        }
        model.UpdateOption("FAQ", "")
    }
    // Uptime
    if v := valMap["UptimeKumaUrl"]; v != "" {
        model.UpdateOption("console_setting.uptime_kuma_url", v)
        model.UpdateOption("UptimeKumaUrl", "")
    }
    if v := valMap["UptimeKumaSlug"]; v != "" {
        model.UpdateOption("console_setting.uptime_kuma_slug", v)
        model.UpdateOption("UptimeKumaSlug", "")
    }

    // 删除旧键记录
    oldKeys := []string{"ApiInfo", "Announcements", "FAQ", "UptimeKumaUrl", "UptimeKumaSlug"}
    model.DB.Where("key IN ?", oldKeys).Delete(&model.Option{})

    // 重新加载 OptionMap
    model.InitOptionMap()
    common.SysLog("console setting migrated")
    c.JSON(http.StatusOK, gin.H{"success": true, "message": "migrated"})
} 