package backstage_service

import (
	"github.com/gogf/gf/frame/g"
	"youngmini_server/app/model/backstage_model"
	"youngmini_server/app/utils"
)

var LittleRed = serviceLittleRed{}

type serviceLittleRed struct{}

// FindAllLittleRed 查询所有
func (s *serviceLittleRed) FindAllLittleRed(littleRed *backstage_model.LittleRedFind) ([]*backstage_model.ResponseRedFind, int, error) {
	var res []*backstage_model.ResponseRedFind
	g.DB().SetDebug(true)
	number, err := utils.RelyNumber(1)
	if err != nil {
		return nil, 0, err
	}
	err = g.DB().Model("platform_little_red_book_account_info").LeftJoin("talent_info", "talent_id = talent_info.id").
		OmitEmpty().Where("talent_id IN(?)", number).Fields("`platform_id`,`platform_account_id`,`platform_nickname`,`submit_date`,`fans_count`,`got_like_count`,`home_page_url`,`skilled_at`,`talent_id`,visit_store_region").
		Page(littleRed.IndexPage, littleRed.PageSize).OrderDesc("talent_id").Scan(&res)
	if err != nil {
		return nil, 0, err
	}
	var result []*backstage_model.ResponseRedFind
	err = g.DB().Model("platform_little_red_book_account_info").LeftJoin("talent_info", "talent_id = talent_info.id").OmitEmpty().
		Where("talent_id IN(?)", number).
		OrderDesc("talent_id").Scan(&result)
	if err != nil {
		return nil, 0, err
	}
	num := len(result)
	return res, num, nil
}

// FindByConditionLittleRed 根据查询条件查询
func (s *serviceLittleRed) FindByConditionLittleRed(littleRed *backstage_model.LittleRedFind) ([]*backstage_model.ResponseRedFind, int, error) {
	var res []*backstage_model.ResponseRedFind
	if littleRed.LittleRed == nil {
		res, num, err := s.FindAllLittleRed(littleRed)
		if err != nil {
			return nil, 0, err
		}
		return res, num, nil
	}
	number, err := utils.RelyNumber(1)
	if err != nil {
		return nil, 0, err
	}
	g.DB().SetDebug(true)
	// 拼接数据库查询字符串语句
	contact := s.contact(littleRed.LittleRed)
	err = g.DB().Model("platform_little_red_book_account_info").LeftJoin("talent_info", "talent_id = talent_info.id").
		OmitEmpty().Where("talent_id IN(?)", number).Where(contact).Fields("`platform_id`,`platform_account_id`,`platform_nickname`,`submit_date`,`fans_count`,`got_like_count`,`home_page_url`,`skilled_at`,`talent_id`,visit_store_region").
		Page(littleRed.IndexPage, littleRed.PageSize).OrderDesc("talent_id").Scan(&res)
	if err != nil {
		return nil, 0, err
	}
	var result []*backstage_model.ResponseRedFind
	err = g.DB().Model("platform_little_red_book_account_info").LeftJoin("talent_info", "talent_id = talent_info.id").
		OmitEmpty().Where(contact).Where("talent_id IN(?)", number).
		Scan(&result)
	if err != nil {
		return nil, 0, err
	}
	num := len(result)
	return res, num, nil
}

// RemoveAccount 账号下架操作（这个先放在这儿，不需要了）
func (s *serviceLittleRed) RemoveAccount(status *backstage_model.RemoveAccountLittleRed) error {
	g.DB().SetDebug(true)
	_, err := g.DB().Model("platform_little_red_book_account_info").
		Data(g.Map{"examine_status": "3", "examine_fail_reason": status.Message}).
		Where("platform_account_id", status.PlatformAccountId).Update()
	if err != nil {
		return err
	}
	return nil
}

// 拼接数据库数据库where语句字符串
func (s *serviceLittleRed) contact(littleRed *backstage_model.RequestRedFind) string {
	var res []string
	if littleRed.PlatformAccountId != "" {
		res = append(res, "platform_account_id="+littleRed.PlatformAccountId)
	}
	if littleRed.TalentId != "" {
		res = append(res, "talent_id="+littleRed.TalentId)
	}
	if len(littleRed.SubmitDate) != 0 {
		res = append(res, "submit_date>'"+littleRed.SubmitDate[0]+" 00:00:00' and "+
			"submit_date<'"+littleRed.SubmitDate[1]+" 23:59:59'")
	}
	if len(littleRed.FansCount) != 0 {
		res = append(res, "fans_count>="+littleRed.FansCount[0]+" and fans_count<="+littleRed.FansCount[1])
	}
	if littleRed.VisitStoreRegion != "" {
		res = append(res, "visit_store_region="+littleRed.VisitStoreRegion)
	}
	if len(littleRed.SkilledAt) != 0 {
		// JSON_CONTAINS包含语句
		var temp string
		for index, value := range littleRed.SkilledAt {
			if index == 0 {
				temp = "JSON_CONTAINS(skilled_at,'" + value + "')"
			} else {
				temp = " OR JSON_CONTAINS(skilled_at,'" + value + "')"
			}
		}
		res = append(res, "("+temp+")")
	}
	var result string
	for _, value := range res {
		result += " and " + value
	}
	return result
}

// FindAllById 单个查询所有
func (s *serviceLittleRed) FindAllById(littleRed *backstage_model.RemoveAccountLittleRed) (*backstage_model.ResponsePlatformLittleRedBookAccountInfo, error) {
	var res *backstage_model.ResponsePlatformLittleRedBookAccountInfo
	err := g.DB().Model("platform_little_red_book_account_info").Where("talent_id", littleRed.PlatformAccountId).Scan(&res)
	if err != nil {
		return nil, err
	}
	return res, nil
}
