package models

import (
	"WorldEpcho/src/datasource"
	"fmt"
	"github.com/go-xorm/xorm"
)

/*
   构建世界推演服务商信息表，
    标记服务商可以创建和体验哪些Tag的世界
      字段服务商ID，名称，联系方式，对应可访问世界标签，可消耗灵感，总消耗灵感
*/

// ServiceProvider 定义服务商的结构体
/*
type ServiceProvider struct {
	ID string `xorm:"'id' pk"` // 服务商ID（32位UUID），主键
	//Uid              int64  `xorm:"'uid'" json:"uid"`                      // 注册用户的id
	Name             string `xorm:"'name'" json:"name"`                    // 服务商名称
	Description      string `xorm:"'description'" json:"description"`      // 服务商描述
	ContactNumber    string `xorm:"contact_number" `                       // 联系方式
	InspirationValue int64  `xorm:"'inspiration'" json:"inspirationValue"` // 服务商初始灵感值（int64）

}*/

type ServiceProvider struct {
	ID               string   `xorm:"'id' pk"`                                     // 服务商ID（32位UUID），主键
	Name             string   `xorm:"'name'" json:"name"`                          // 服务商名称
	Description      string   `xorm:"'description'" json:"description"`            // 服务商描述
	ContactNumber    string   `xorm:"'contact_number'"`                            // 联系方式
	AccessibleTags   []string `xorm:"'accessible_tags'" json:"accessibleTags"`     // 对应可访问世界的标签列表
	InspirationValue int64    `xorm:"'inspiration_value'" json:"inspirationValue"` // 可消耗的灵感值
	TotalInspiration int64    `xorm:"'total_inspiration'" json:"totalInspiration"` // 总消耗的灵感值
}

// CreateServiceProvider 创建一个服务商
func CreateServiceProvider(sp *ServiceProvider) error {
	_, err := datasource.Engine.Insert(sp)
	return err
}

// DeleteServiceProviderById 根据ID删除一个服务商
func DeleteServiceProviderById(id string) error {
	_, err := datasource.Engine.Where("id = ?", id).Delete(&ServiceProvider{})
	return err
}

// UpdateServiceProvider 更新服务商信息
func UpdateServiceProvider(sp *ServiceProvider) error {
	_, err := datasource.Engine.ID(sp.ID).Update(sp)
	if err != nil {
		fmt.Println("更新失败:", err)
		return err
	}
	fmt.Println("更新成功")
	return nil
}
func UpdateServiceProviderColsMuse(sp *ServiceProvider) error {
	_, err := datasource.Engine.ID(sp.ID).Cols("inspiration_value").Update(sp)
	return err
}

// GetServiceProviderById 根据ID获取服务商信息
func GetServiceProviderById(id string) (*ServiceProvider, error) {
	//sp := &ServiceProvider{ID: id}
	sp := new(ServiceProvider)
	has, err := datasource.Engine.ID(id).Get(sp)
	if err != nil {
		return nil, err
	}
	if !has {
		return nil, nil
	}
	return sp, nil
}

func GetServiceProviderById_Tx(session *xorm.Session, id string) (*ServiceProvider, error) {
	//sp := &ServiceProvider{ID: id}
	sp := new(ServiceProvider)
	has, err := session.ID(id).Get(sp)
	if err != nil {
		return nil, err
	}
	if !has {
		return nil, nil
	}
	return sp, nil
}

// GetAllServiceProviders 获取所有服务商信息
func GetAllServiceProviders() ([]*ServiceProvider, error) {
	var sps []*ServiceProvider
	err := datasource.Engine.Find(&sps)
	return sps, err
}
