package main

import (
	"encoding/json"
	"fmt"
	"git.hilo.cn/hilo-common/script/model"
	"git.hilo.cn/hilo-common/script/mysql"
	"github.com/tealeg/xlsx"
	"time"
)

type GroupActivityAwardLog struct {
	GroupActId  uint64 // 活动id
	UserId      uint64 // 用户id
	ImGroupId   string // imGroupId
	Award       string
	CreatedTime string
}

type Award struct {
	ResGiftId uint64
	Num       int
}

type GroupActivityData struct {
	Country          string // 国家
	Area             string // 区域
	OwnerCode        string // 房主靓号
	GroupCode        string // 群组靓号
	AwardGift3111Num int    // 3111礼物id数量
	AwardGift3101Num int    // 3101礼物id数量
	AwardGift3091Num int    // 3091礼物id数量
	AwardPrice       int    // 总的礼物价值
	ActivityConsume  uint64 // 活动流水
	AwardTime        string // 奖励时间
}

type GroupActivity struct {
	Id      uint64
	StartAt int64
	EndAt   int64
}

func ats3(a interface{}) string {
	return fmt.Sprintf("%d", a)
}

func main() {
	var awardLogs []GroupActivityAwardLog
	if err := mysql.ProdReadOnlyDB.Model(GroupActivityAwardLog{}).Where("created_time < ?", "2023-03-17 12:15:18").Find(&awardLogs).Error; err != nil {
		panic(err)
	}
	var countrys []model.ResCountry
	if err := mysql.ProdReadOnlyDB.Model(model.ResCountry{}).Find(&countrys).Error; err != nil {
		panic(err)
	}
	cm := make(map[string]int)
	for _, c := range countrys {
		cm[c.Name] = c.Area
	}
	var data []GroupActivityData
	for _, log := range awardLogs {
		var user = new(model.User)
		if err := mysql.ProdReadOnlyDB.Table("user").Where("id = ?", log.UserId).First(user).Error; err != nil {
			panic(err)
		}
		var group = new(model.GroupInfo)
		if err := mysql.ProdReadOnlyDB.Table("group_info").Where("im_group_id = ?", log.ImGroupId).First(group).Error; err != nil {
			panic(err)
		}
		area := "阿语"
		if cm[user.Country] == 2 {
			area = "非阿语"
		}
		var awards []Award
		if err := json.Unmarshal([]byte(log.Award), &awards); err != nil {
			panic(err)
		}
		var num3111, num3101, num3091 int
		for _, a := range awards {
			if a.ResGiftId == 3111 {
				num3111 = a.Num
			}
			if a.ResGiftId == 3101 {
				num3101 = a.Num
			}
			if a.ResGiftId == 3091 {
				num3091 = a.Num
			}
		}
		var groupActivity = new(GroupActivity)
		if err := mysql.ProdReadOnlyDB.Model(GroupActivity{}).Where("id = ?", log.GroupActId).First(groupActivity).Error; err != nil {
			panic(err)
		}
		start := time.UnixMilli(groupActivity.StartAt)
		end := time.UnixMilli(groupActivity.EndAt)
		type summary struct {
			C       uint32
			Consume uint64
		}
		rows := make([]summary, 0)
		if err := mysql.ProdReadOnlyDB.Table("gift_operate").
			Select("COUNT(DISTINCT(send_user_id)) AS c, SUM(send_user_diamond) AS Consume").
			Where("scene_type = 4 AND scene_uid = ?", log.ImGroupId).
			Where("created_time BETWEEN ? AND ?", start, end).
			Find(&rows).Error; err != nil {
			panic(err)
		}
		consume := uint64(0)
		if len(rows) > 0 {
			consume = rows[0].Consume
		}
		data = append(data, GroupActivityData{
			Country:          user.Country,
			Area:             area,
			OwnerCode:        user.Code,
			GroupCode:        group.Code,
			AwardGift3111Num: num3111,
			AwardGift3101Num: num3101,
			AwardGift3091Num: num3091,
			AwardPrice:       num3111*10000 + num3101*3000 + num3091*1000,
			ActivityConsume:  consume,
			AwardTime:        log.CreatedTime,
		})
	}
	excelFileName := fmt.Sprintf("./群组扶持数据.xlsx")
	xlFile := xlsx.NewFile()
	sheet, _ := xlFile.AddSheet("charge")
	row := sheet.AddRow()
	c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 := row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell()
	c1.Value, c2.Value, c3.Value, c4.Value, c5.Value, c6.Value, c7.Value, c8.Value, c9.Value, c10.Value =
		"国家", "区域", "房主靓号", "群组靓号", "3111礼物数量", "3101礼物数量", "3091礼物数量", "总的礼物价值", "活动流水", "奖励时间"
	for _, d := range data {
		row := sheet.AddRow()
		c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 := row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell(), row.AddCell()
		c1.Value, c2.Value, c3.Value, c4.Value, c5.Value, c6.Value, c7.Value, c8.Value, c9.Value, c10.Value =
			d.Country, d.Area, d.OwnerCode, d.GroupCode, ats3(d.AwardGift3111Num), ats3(d.AwardGift3101Num), ats3(d.AwardGift3091Num), ats3(d.AwardPrice), ats3(d.ActivityConsume), d.AwardTime
	}
	_ = xlFile.Save(excelFileName)
}