package setting

import (
	"context"
	"git.oa00.com/supply-chain/service/client"
	"git.oa00.com/supply-chain/service/lib/bean"
)

type tag struct {
}

type ArgsTagList struct {
	Search TagSearch
	Page   bean.Page
}

type TagItem struct {
	Id        uint   `json:"id"`
	Name      string `json:"name"`
	CreatedAt int64  `json:"createdAt"`
	UpdatedAt int64  `json:"updatedAt"`
}
type ReplyTagList struct {
	Lists []TagItem `json:"lists"`
	Total int64     `json:"total"`
}

type TagSearch struct {
	Name string // 标签名称
}

// Lists @Title 标签列表
func (b *tag) Lists(ctx context.Context, args ArgsTagList) (result ReplyTagList, err error) {
	xClient, err := client.GetClient(b)
	if err != nil {
		return
	}
	err = xClient.Call(ctx, "Lists", args, &result)
	return
}

// All @Title 全部标签
func (b *tag) All(ctx context.Context) (result []TagItem, err error) {
	xClient, err := client.GetClient(b)
	if err != nil {
		return
	}
	err = xClient.Call(ctx, "All", 0, &result)
	return
}

// FindByNameAll @Title 标签名称筛选标签
func (b *tag) FindByNameAll(ctx context.Context, name string) (result []TagItem, err error) {
	xClient, err := client.GetClient(b)
	if err != nil {
		return
	}
	err = xClient.Call(ctx, "FindByNameAll", name, &result)
	return
}

type ArgsTagAdd struct {
	Name string // 标签名称
}

// Add @Title 添加标签
func (b *tag) Add(ctx context.Context, args ArgsTagAdd) (err error) {
	reply := 0
	xClient, err := client.GetClient(b)
	if err != nil {
		return err
	}
	return xClient.Call(ctx, "Add", args, &reply)
}

// Adds @Title 添加标签
func (b *tag) Adds(ctx context.Context, tagNames []string) (err error) {
	reply := 0
	xClient, err := client.GetClient(b)
	if err != nil {
		return err
	}
	return xClient.Call(ctx, "Adds", tagNames, &reply)
}

type ArgsTagEdit struct {
	TagId uint   // 标签id
	Name  string // 标签名称
}

// Edit @Title 编辑标签
func (b *tag) Edit(ctx context.Context, args ArgsTagEdit) (err error) {
	reply := 0
	xClient, err := client.GetClient(b)
	if err != nil {
		return err
	}
	return xClient.Call(ctx, "Edit", args, &reply)
}

type ArgsTagFindByIds struct {
	TagIds []uint // 标签id数组
}

// FindByIds @Title 标签获取
func (b *tag) FindByIds(ctx context.Context, args ArgsTagFindByIds) (result []TagItem, err error) {
	xClient, err := client.GetClient(b)
	if err != nil {
		return
	}
	err = xClient.Call(ctx, "FindByIds", args, &result)
	return
}