package main

import (
	"embed"
	"fmt"
	"io/fs"
	"log"
	"os"
	"path/filepath"
)

//go:embed ip2region/*
var embeddedFS embed.FS

func releaseEmbeddedDir(efs embed.FS, embedPath string, targetDir string) error {
	return fs.WalkDir(efs, embedPath, func(path string, d fs.DirEntry, err error) error {
		if err != nil {
			return err
		}

		relPath, _ := filepath.Rel(embedPath, path)
		targetPath := filepath.Join(targetDir, relPath)

		if d.IsDir() {
			return os.MkdirAll(targetPath, 0755)
		}

		data, err := efs.ReadFile(path)
		if err != nil {
			return fmt.Errorf("读取嵌入文件失败: %w", err)
		}

		// 如果文件已存在就跳过（可选）
		if _, err := os.Stat(targetPath); err == nil {
			log.Printf(" 文件已存在: %s, 跳过写入\n", targetPath)
			return nil
		}

		err = os.WriteFile(targetPath, data, 0644)
		if err != nil {
			return fmt.Errorf("写入文件失败: %w", err)
		}

		log.Printf(" 释放: %s → %s\n", path, targetPath)
		return nil
	})
}

func embed_ip2region() {
	log.Println(" 正在释放 ip2region 数据...")

	err := releaseEmbeddedDir(embeddedFS, "ip2region", "ip2region")
	if err != nil {
		log.Println(" 释放失败:", err)
		os.Exit(1)
	}

	log.Println(" 释放完成，程序继续执行...")

	// 你可以在这里使用 ip2region.xdb 文件了，例如：
	if _, err := os.Stat("ip2region/ip2region.xdb"); err == nil {
		log.Println(" ✅ 确认 ip2region.xdb 已成功写出")
		// 这里可以调用 ip2region 逻辑加载它
	} else {
		log.Println(" ❌ 找不到 ip2region.xdb")
	}
}
