package classify

import (
	"errors"
	"hongze/hongze_yb/global"
	"hongze/hongze_yb/utils"
)

func GetSimpleAll() (list []*Classify, err error) { // 过滤权益研报的分类
	err = global.MYSQL["rddp"].Select("id, classify_name, yb_icon_url, yb_bg_url, parent_id").Model(Classify{}).Where("is_show = 1 AND parent_id != 56 AND id != 56").Scan(&list).Error
	return
}

// GetByClassifyName 根据分类名称查找专栏详情
func GetByClassifyName(classifyName string) (item *Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).Where("classify_name = ?", classifyName).First(&item).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetByClassifyNameFirst 根据一级分类名称查找一级分类
func GetByClassifyNameFirst(classifyName string) (item *Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).Where("classify_name = ? and parent_id = 0", classifyName).First(&item).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetSecondIdsByClassifyNames 根据权限相关的二级分类名称获取名称ID
func GetSecondIdsByClassifyNames(names []string) (ids []int, err error) {
	var list []*Classify
	err = global.MYSQL["rddp"].Model(Classify{}).Select("id").Where("classify_name in (?) and parent_id >0 AND is_show = 1 AND enabled = 1 AND parent_id != 56", names).Scan(&list).Error
	if err != nil {
		if err == utils.ErrNoRow {
			err = nil
		}
		return
	}
	for _, v := range list {
		ids = append(ids, v.Id)
	}
	return
}

// GetParentList 查询所有一级分类
func GetParentList() (list []*Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).
		Select("id, classify_name, show_type, yb_ficc_icon, yb_ficc_pc_icon, yb_ficc_sort").
		Where("parent_id = 0 and classify_name != '权益研报' AND is_show = 1 AND enabled = 1").
		Order("sort asc, id asc").Scan(&list).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetByClassifyId 根据分类ID查询分类详情
func GetByClassifyId(id int) (item *Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).Where("id = ? AND is_show = 1 AND enabled = 1", id).First(&item).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetListByPid 根据分类名称查找专栏列表
func GetListByPid(pid int) (list []*Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).
		Select("id, classify_name, parent_id, abstract, report_author, author_descript, home_img_url, vip_title, avatar_img_url").
		Where("parent_id = ? AND is_show = 1 AND enabled = 1", pid).Order("sort asc, id asc").Scan(&list).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetIdsByClassifyNameAndParentId 查询
func GetIdsByClassifyNameAndParentId(names []string, parentId int) (ids []int, err error) {
	var list []*Classify
	err = global.MYSQL["rddp"].Model(Classify{}).Select("id").Where("classify_name in (?) and parent_id = ? AND is_show = 1 AND enabled = 1", names, parentId).Scan(&list).Error
	if err != nil {
		return
	}
	for _, v := range list {
		ids = append(ids, v.Id)
	}
	return
}

// GetOtherIdsByClassifyNames 查询
func GetOtherIdsByClassifyNames(names []string) (ids []int, err error) {
	var list []*Classify
	err = global.MYSQL["rddp"].Model(Classify{}).Select("id").Where("classify_name in (?) and parent_id > 0 AND is_show = 1 AND enabled = 1", names).Scan(&list).Error
	if err != nil {
		return
	}
	for _, v := range list {
		ids = append(ids, v.Id)
	}
	return
}

// GetOtherIdsByClassifyNames 查询
func GetOtherSecondIds(names []string) (ids []int, err error) {
	var list []*Classify
	err = global.MYSQL["rddp"].Model(Classify{}).Select("id").Where("parent_id IN (SELECT id FROM classify WHERE classify_name IN (?) AND parent_id = 0 AND is_show = 1 AND enabled = 1)", names).Scan(&list).Error
	if err != nil {
		return
	}
	for _, v := range list {
		ids = append(ids, v.Id)
	}
	return
}

// GetChildByPid 根据一级分类查找二级分类
func GetChildByPid(pid int) (list []*Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).Where("parent_id = ? AND is_show = 1 AND enabled = 1", pid).Scan(&list).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetClassifyList 获取全部分类
func GetClassifyList() (list []*Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).Scan(&list).Error
	return
}

// GetByClassifyIdFirst
// @Description: 根据一级分类id查找一级分类
// @author: Roc
// @datetime 2024-06-24 13:57:59
// @param classifyId int
// @return item *Classify
// @return err error
func GetByClassifyIdFirst(classifyId int) (item *Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).Where("id = ? and parent_id = 0", classifyId).First(&item).Error
	if errors.Is(err, utils.ErrNoRow) {
		err = nil
	}

	return
}

// GetListByClassifyIdList
// @Description: 根据ID列表获取所有的分类
// @param idList
// @return list
// @return err
func GetListByClassifyIdList(idList []int) (list []*Classify, err error) {
	err = global.MYSQL["rddp"].Model(Classify{}).Where("id in (?) AND is_show = 1 AND enabled = 1", idList).Find(&list).Error
	return

}
