package pan

import (
	"fmt"

	"github.com/ctwj/urldb/db/entity"
	"github.com/ctwj/urldb/db/repo"
)

// UCService UC网盘服务
type UCService struct {
	*BasePanService
}

// NewUCService 创建UC网盘服务
func NewUCService(config *PanConfig) *UCService {
	service := &UCService{
		BasePanService: NewBasePanService(config),
	}

	// 设置UC网盘的默认请求头
	service.SetHeaders(map[string]string{
		"Accept":          "application/json, text/plain, */*",
		"Accept-Language": "zh-CN,zh;q=0.9",
		"Content-Type":    "application/json",
		"User-Agent":      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
	})

	return service
}

// GetServiceType 获取服务类型
func (u *UCService) GetServiceType() ServiceType {
	return UC
}

// Transfer 转存分享链接
func (u *UCService) Transfer(shareID string) (*TransferResult, error) {
	// TODO: 实现UC网盘转存逻辑
	return ErrorResult("UC网盘转存功能暂未实现"), nil
}

// GetFiles 获取文件列表
func (u *UCService) GetFiles(pdirFid string) (*TransferResult, error) {
	// TODO: 实现UC网盘文件列表获取
	return ErrorResult("UC网盘文件列表功能暂未实现"), nil
}

// DeleteFiles 删除文件
func (u *UCService) DeleteFiles(fileList []string) (*TransferResult, error) {
	// TODO: 实现UC网盘文件删除
	return ErrorResult("UC网盘文件删除功能暂未实现"), nil
}

func (x *UCService) UpdateConfig(config *PanConfig) {
	if config == nil {
		return
	}
	x.config = config
	if config.Cookie != "" {
		x.SetHeader("Cookie", config.Cookie)
	}
}

// GetUserInfo 获取用户信息
func (u *UCService) GetUserInfo(cookie *string) (*UserInfo, error) {
	// 设置Cookie
	u.SetHeader("Cookie", *cookie)

	// 调用UC网盘用户信息API
	userInfoURL := "https://drive.uc.cn/api/user/info"

	resp, err := u.HTTPGet(userInfoURL, nil)
	if err != nil {
		return nil, fmt.Errorf("获取用户信息失败: %v", err)
	}

	// 解析响应
	var result struct {
		Code int `json:"code"`
		Data struct {
			Username   string `json:"username"`
			Nickname   string `json:"nickname"`
			VipStatus  int    `json:"vip_status"`
			TotalSpace int64  `json:"total_space"`
			UsedSpace  int64  `json:"used_space"`
		} `json:"data"`
	}

	if err := u.ParseJSONResponse(resp, &result); err != nil {
		return nil, fmt.Errorf("解析用户信息失败: %v", err)
	}

	if result.Code != 0 {
		return nil, fmt.Errorf("API返回错误: %d", result.Code)
	}

	// 转换VIP状态
	vipStatus := result.Data.VipStatus > 0

	// 使用nickname或username
	username := result.Data.Nickname
	if username == "" {
		username = result.Data.Username
	}

	return &UserInfo{
		Username:    username,
		VIPStatus:   vipStatus,
		UsedSpace:   result.Data.UsedSpace,
		TotalSpace:  result.Data.TotalSpace,
		ServiceType: "uc",
	}, nil
}

// GetUserInfoByEntity 根据 entity.Cks 获取用户信息（待实现）
func (u *UCService) GetUserInfoByEntity(cks entity.Cks) (*UserInfo, error) {
	return nil, nil
}

func (u *UCService) SetCKSRepository(cksRepo repo.CksRepository, entity entity.Cks) {
}
