package yb_community_question_comment

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

// GetByCommunityQuestionCommentId 根据留言ID，查询留言
func GetByCommunityQuestionCommentId(communityQuestionCommentId uint64) (item *YbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Where("community_question_comment_id =  ? ", communityQuestionCommentId).First(&item).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetListByUserIdCommunityQuestionID 获取用户的留言列表
func GetListByUserIdCommunityQuestionID(userId uint64, communityQuestionID, source int) (list []*YbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Where("user_id = ? AND community_question_id = ? AND enabled = 1 AND source = ?", userId, communityQuestionID, source).
		Order("create_time desc, community_question_comment_id desc").
		Scan(&list).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetListTotalByUserIdCommunityQuestionID 获取用户的留言总条数
func GetListTotalByUserIdCommunityQuestionID(userId uint64, communityQuestionID, source int) (total int64, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Where("user_id = ? AND community_question_id = ? AND enabled = 1 AND source = ?", userId, communityQuestionID, source).
		Count(&total).Error
	return
}

// GetHotListByCommunityQuestionID 获取报告的精选留言列表(2022-08-23修改为获取所有留言, 不再精选)
func GetHotListByCommunityQuestionID(communityQuestionID int, offset, limit, source int) (list []*YbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Where("community_question_id = ? AND enabled = 1 AND type = 1 AND source = ?", communityQuestionID, source).
		//Order("is_top desc, hot_top_time desc, community_question_comment_id desc").
		Order("create_time DESC").
		Offset(offset).
		Limit(limit).
		Scan(&list).Error
	return
}

// GetHotListTotalByCommunityQuestionID 获取精选留言总条数(2022-08-23修改为获取所有留言, 不再精选)
func GetHotListTotalByCommunityQuestionID(communityQuestionID, source int) (total int64, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Where("community_question_id = ? AND enabled = 1 AND type = 1 AND source = ?", communityQuestionID, source).
		Count(&total).Error
	return
}

// GetReplyListByReplyCommentId 获取报告的精选留言的回复列表
func GetReplyListByReplyCommentId(replyCommentIds []uint64) (list []*YbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Where("enabled = 1 and type = 2 and reply_comment_id in ?", replyCommentIds).
		Order("community_question_comment_id asc").
		Scan(&list).Error
	return
}

type SimpleYbCommunityQuestionComment struct {
	CommunityQuestionCommentID uint64 `gorm:"primaryKey;column:community_question_comment_id;type:bigint(20) unsigned;not null" json:"-"`
	UserID                     uint64 `gorm:"column:user_id;type:bigint(20) unsigned;not null;default:0" json:"userId"` // 用户id
	Type                       int8   `gorm:"column:type;type:tinyint(1);not null;default:1" json:"type"`               // 留言类型 1-评论 2-回复
	Enabled                    int8   `gorm:"column:enabled;type:tinyint(1);not null;default:1" json:"enabled"`         // 是否有效, 0-无效留言 1-有效留言
}

// GetSimpleByCommentId 根据留言ID，查询留言
func GetSimpleByCommentId(commentId uint64) (item *SimpleYbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Select("community_question_comment_id, user_id, type, enabled").
		Where("community_question_comment_id = ?", commentId).First(&item).Error
	if err == utils.ErrNoRow {
		err = nil
	}
	return
}

// GetMyLatestComment 获取用户最新的留言
func GetMyLatestComment(userId uint64) (item *YbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Select("comment_id, user_id, type, enabled, is_show_name").
		Where("user_id = ? and type=1", userId).Order("community_question_comment_id desc").First(&item).Error
	return
}

// NumCommentByCommunityQuestion 评论统计结构体
type NumCommentByCommunityQuestion struct {
	CommunityQuestionID uint32 `json:"community_question_id"`
	Total               int    `json:"total"`
}

// GetNumCommentByCommunityQuestionIds 获取用户留言的汇总数
func GetNumCommentByCommunityQuestionIds(communityQuestionIds []uint32, userId uint64) (item []*NumCommentByCommunityQuestion, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Select("community_question_id, count(1) total").
		Where("community_question_id in (?) and type=1 and enabled = 1 and (is_hot = 1 or user_id=?) ", communityQuestionIds, userId).Group("community_question_id").Scan(&item).Error
	return
}

// GetLastHotListByCommunityQuestionIds 根据问答id列表获取最近精选的留言
func GetLastHotListByCommunityQuestionIds(communityQuestionIds []uint32) (items []*YbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Where("community_question_comment_id in (SELECT MAX(community_question_comment_id) AS community_question_comment_id FROM yb_community_question_comment WHERE community_question_id IN (?) AND enabled = 1 AND is_hot = 1 AND type = 1 GROUP BY community_question_id)", communityQuestionIds).
		Find(&items).Error
	return
}

// GetLastMyListByCommunityQuestionIds 根据问答id列表获取我最近的留言
func GetLastMyListByCommunityQuestionIds(userId uint64, communityQuestionIds []uint32) (items []*YbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Where("community_question_comment_id in (SELECT MAX(community_question_comment_id) AS community_question_comment_id FROM yb_community_question_comment WHERE user_id=? AND community_question_id IN (?) AND enabled = 1 AND type = 1 GROUP BY community_question_id)", userId, communityQuestionIds).
		Find(&items).Error
	return
}

type UserAvatarRandom struct {
	AvatarUrl string
}

func GetUserAvatarRandom() (item *UserAvatarRandom, err error) {
	sql := ` select * from user_avatar_random order by rand() limit 1 `
	err = global.DEFAULT_MYSQL.Raw(sql).Scan(&item).Error
	return
}

// GetHotListByCommunityQuestionIds 根据问答id列表获取精选留言-精选时间倒序(2022-0823不再精选，获取所有评论)
func GetHotListByCommunityQuestionIds(communityQuestionIds []uint32, source int) (items []*YbCommunityQuestionComment, err error) {
	err = global.DEFAULT_MYSQL.Model(YbCommunityQuestionComment{}).
		Where("community_question_id IN (?) AND enabled = 1 AND type = 1 AND source = ?", communityQuestionIds, source).
		Order("hot_time DESC").
		Find(&items).Error
	return
}
