package services

import (
	"errors"
	"fmt"
	"hongze/hongze_clpt/models"
	"hongze/hongze_clpt/utils"
	"strings"
)

// GetArticleGroupSubjectMap 获取文章所关联的标的
func GetArticleGroupSubjectMap(articleIds []int) (mapResp map[int][]*models.IndustrialSubject, subjectMap map[int]string, err error) {
	lenArticleIds := len(articleIds)
	if lenArticleIds == 0 {
		return
	}
	var condition string
	var pars []interface{}
	condition = ` AND g.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)`
	pars = append(pars, articleIds)
	list, e := models.GetArticleGroupSubjectList(pars, condition)
	if e != nil {
		err = errors.New("GetArticleGroupSubjectList " + e.Error())
		return
	}
	listMap := make(map[int][]*models.IndustrialSubject)
	subMap := make(map[int]string)
	mapName := make(map[int]int)
	if len(list) > 0 {
		for _, v := range list {
			item := models.IndustrialSubject{
				IndustrialSubjectId:    v.IndustrialSubjectId,
				IndustrialManagementId: v.IndustrialManagementId,
				SubjectName:            v.SubjectName,
			}
			listMap[v.ArticleId] = append(listMap[v.ArticleId], &item)
			subMap[v.IndustrialSubjectId] = v.SubjectName
			mapName[v.IndustrialSubjectId] = v.IndustrialManagementId
		}
	}
	mapResp = listMap
	subjectMap = subMap
	return
}

// GetArticleGroupSubjectMapByIndustrialManagementId 通过文章ID,产业;获取文章所关联的标的
func GetArticleGroupSubjectMapByIndustrialManagementId(articleIds []int, industrialManagementId int) (mapResp map[int][]*models.CygxIndustrialSubject) {
	var err error
	lenArticleIds := len(articleIds)
	if lenArticleIds == 0 {
		return
	}
	defer func() {
		if err != nil {
			go utils.SendAlarmMsg(fmt.Sprint("通过文章ID,产业;获取文章所关联的标的失败 ,GetArticleGroupSubjectMapByIndustrialManagementId err"+err.Error(), "articleIds:", articleIds), 2)
		}
	}()

	mapSubject := make(map[string]int)
	listSub, e := models.GetcygxIndustrialSubject(industrialManagementId)
	if e != nil {
		err = errors.New("GetcygxIndustrialSubject, Err: " + e.Error())
		return
	}
	for _, v := range listSub {
		mapSubject[v.SubjectName] = v.IndustrialSubjectId
	}

	var condition string
	var pars []interface{}
	condition += ` AND  article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `) `
	pars = append(pars, articleIds)
	articleList, e := models.GetArticleList(condition, pars)
	if e != nil {
		err = errors.New("GetArticleList, Err: " + e.Error())
		return
	}

	listMap := make(map[int][]*models.CygxIndustrialSubject, 0)
	for _, v := range articleList {
		sliceSubjects := strings.Split(v.Stock, "/")
		for _, vSubject := range sliceSubjects {
			sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
			sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
			subject := sliceXiahuaxian[0]
			if mapSubject[subject] == 0 {
				continue
			}
			item := models.CygxIndustrialSubject{
				IndustrialSubjectId:    mapSubject[subject],
				IndustrialManagementId: industrialManagementId,
				SubjectName:            subject,
			}
			listMap[v.ArticleId] = append(listMap[v.ArticleId], &item)
		}
	}

	//condition = ` AND g.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)  AND s.industrial_management_id = ? `
	//pars = append(pars, articleIds, industrialManagementId)
	//list, e := models.GetArticleGroupSubjectList(pars, condition)
	//if e != nil {
	//	err = errors.New("GetArticleGroupSubjectList " + e.Error())
	//	return
	//}
	//
	//if len(list) > 0 {
	//	for _, v := range list {
	//		item := models.CygxIndustrialSubject{
	//			IndustrialSubjectId:    v.IndustrialSubjectId,
	//			IndustrialManagementId: v.IndustrialManagementId,
	//			SubjectName:            v.SubjectName,
	//		}
	//		listMap[v.ArticleId] = append(listMap[v.ArticleId], &item)
	//	}
	//}
	mapResp = listMap
	return
}