package system

import (
	"context"
	"time"
)

// Params 系统参数实体
type Params struct {
	ID        uint
	CreatedAt time.Time
	UpdatedAt time.Time
	Name      string // 参数名
	Key       string // 参数键
	Value     string // 参数值
	Desc      string // 参数描述
}

// ParamsRepo 系统参数仓储接口
type ParamsRepo interface {
	Create(ctx context.Context, params *Params) error
	Delete(ctx context.Context, id uint) error
	DeleteByIds(ctx context.Context, ids []uint) error
	Update(ctx context.Context, params *Params) error
	FindByID(ctx context.Context, id uint) (*Params, error)
	FindByKey(ctx context.Context, key string) (*Params, error)
	FindList(ctx context.Context, page, pageSize int, filters map[string]interface{}) ([]*Params, int64, error)
}

// ParamsUsecase 系统参数用例
type ParamsUsecase struct {
	repo ParamsRepo
}

// NewParamsUsecase 创建系统参数用例
func NewParamsUsecase(repo ParamsRepo) *ParamsUsecase {
	return &ParamsUsecase{repo: repo}
}

// Create 创建参数
func (uc *ParamsUsecase) Create(ctx context.Context, params *Params) error {
	return uc.repo.Create(ctx, params)
}

// Delete 删除参数
func (uc *ParamsUsecase) Delete(ctx context.Context, id uint) error {
	return uc.repo.Delete(ctx, id)
}

// DeleteByIds 批量删除参数
func (uc *ParamsUsecase) DeleteByIds(ctx context.Context, ids []uint) error {
	return uc.repo.DeleteByIds(ctx, ids)
}

// Update 更新参数
func (uc *ParamsUsecase) Update(ctx context.Context, params *Params) error {
	return uc.repo.Update(ctx, params)
}

// GetByID 根据ID获取参数
func (uc *ParamsUsecase) GetByID(ctx context.Context, id uint) (*Params, error) {
	return uc.repo.FindByID(ctx, id)
}

// GetByKey 根据Key获取参数
func (uc *ParamsUsecase) GetByKey(ctx context.Context, key string) (*Params, error) {
	return uc.repo.FindByKey(ctx, key)
}

// GetList 获取参数列表
func (uc *ParamsUsecase) GetList(ctx context.Context, page, pageSize int, filters map[string]interface{}) ([]*Params, int64, error) {
	return uc.repo.FindList(ctx, page, pageSize, filters)
}
