package main

import (
	"bufio"
	"log"
	"os"
	"strings"
	"sync"
)

var (
	whiteList     = make(map[string]struct{})
	whiteListLock = sync.RWMutex{}
)

func LoadWhiteList(filename string) error {
	// 如果文件不存在，直接返回 nil 表示无需加载
	if _, err := os.Stat(filename); os.IsNotExist(err) {
		log.Printf(" 白名单文件 %s 不存在，跳过加载。", filename)
		return nil
	}

	file, err := os.Open(filename)
	if err != nil {
		return err
	}
	defer file.Close()

	scanner := bufio.NewScanner(file)
	tempList := make(map[string]struct{})

	for scanner.Scan() {
		ip := strings.TrimSpace(scanner.Text())
		if ip != "" {
			tempList[ip] = struct{}{}
		}
	}

	if err := scanner.Err(); err != nil {
		return err
	}

	// 用写锁更新全局白名单
	whiteListLock.Lock()
	whiteList = tempList
	whiteListLock.Unlock()

	log.Println(" 白名单已加载完成")
	return nil
}
