package service

import (
	"pure/global"
	"pure/model"
)

func GetTbCategoryBreadcrumb(id uint) (error, []model.Breadcrumb) {
	var (
		category model.Breadcrumb
		result   = make([]model.Breadcrumb, 0)
	)
	err := global.MG_DB.Table("tb_category").Select("id,`name`,pid,is_leaf").Where("status = 1 AND id = ?", id).Find(&category).Error
	if err != nil {
		return err, nil
	}
	if category.Pid != 0 {
		err = getTbCategoryParent(&category)
		if err != nil {
			return err, nil
		}
	}
	transferBreadcrumbList(&category, &result)
	return nil, result
}

func getTbCategoryParent(breadcrumb *model.Breadcrumb) (err error) {
	var tmp model.Breadcrumb
	err = global.MG_DB.Table("tb_category").Select("id,`name`,pid,is_leaf").Where("status = 1 AND id = ?", breadcrumb.Pid).Find(&tmp).Error
	if err != nil {
		return err
	}
	breadcrumb.Parent = &tmp
	if breadcrumb.Parent.Pid != 0 {
		err = getTbCategoryParent(breadcrumb.Parent)
		return err
	}
	return nil
}

func transferBreadcrumbList(info *model.Breadcrumb, breadcrumbs *[]model.Breadcrumb) {
	if info.ID != 0 {
		*breadcrumbs = append(*breadcrumbs, *info)
		if info.Parent != nil {
			transferBreadcrumbList(info.Parent, breadcrumbs)
		}
	}
}