package dto

import (
	"opencatd-open/internal/model"
	"opencatd-open/internal/utils"
)

type UserInfo struct {
	ID     int64  `json:"id"`
	Name   string `json:"name"`
	Token  string `json:"token"`
	Status *bool  `json:"status,omitempty"`
}

func (u UserInfo) HasNameUpdate() bool {
	return u.Name != ""
}

func (u UserInfo) HasTokenUpdate() bool {
	return u.Token != ""
}

func (u UserInfo) HasStatusUpdate() bool {
	return u.Status != nil
}

type ApiKeyInfo struct {
	ID       int    `json:"id,omitempty"`
	Key      string `json:"key,omitempty"`
	Name     string `json:"name,omitempty"`
	ApiType  string `json:"api_type,omitempty"`
	Endpoint string `json:"endpoint,omitempty"`
	Status   *bool  `json:"status,omitempty"`
}

// 添加辅助方法判断字段是否需要更新
func (k ApiKeyInfo) HasNameUpdate() bool {
	return k.Name != ""
}

func (k ApiKeyInfo) HasKeyUpdate() bool {
	return k.Key != ""
}

func (k ApiKeyInfo) HasStatusUpdate() bool {
	return k.Status != nil
}

func (k ApiKeyInfo) HasApiTypeUpdate() bool {
	return k.ApiType != ""
}

// 辅助函数：统一处理字段更新
func (update *ApiKeyInfo) UpdateFields(existing *model.ApiKey) *model.ApiKey {
	result := &model.ApiKey{
		ID:      existing.ID,
		Name:    existing.Name,    // 默认保持原值
		ApiType: existing.ApiType, // 默认保持原值
		ApiKey:  existing.ApiKey,  // 默认保持原值
		Active:  existing.Active,  // 默认保持原值
	}

	if update.HasNameUpdate() {
		result.Name = utils.ToPtr(update.Name)
	}
	if update.HasKeyUpdate() {
		result.ApiKey = utils.ToPtr(update.Key)
	}
	if update.HasStatusUpdate() {
		result.Active = update.Status
	}
	if update.HasApiTypeUpdate() {
		result.ApiType = utils.ToPtr(update.ApiType)
	}

	return result
}

type UsageInfo struct {
	UserId    int    `json:"userId"`
	TotalUnit int    `json:"totalUnit"`
	Cost      string `json:"cost"`
}
