package service

import (
	"errors"
	"fengkuangGameServerJob/dao"
	"fengkuangGameServerJob/model"
	"fengkuangGameServerJob/pkg/util"
	"fmt"
	"strconv"
	"time"
)

// PackService 礼包相关服务层
type PackService struct {
}

func NewPackService() *PackService {
	return &PackService{}
}

// GetMinPackIcon 获取最近一个弹窗icon生命时间，并判断有没到期
//到期了返回弹窗礼包在数据库中的自增ID
func (p *PackService) GetMinPackIcon() (int, error) {
	info, err := dao.GetIconLiveFirst()
	if err != nil {
		return 0, err
	}
	if len(info) == 0 {
		return 0, nil
	}
	currentData := info[0]
	iconEndUnix := util.F2I(currentData.Score) //icon的到期时间
	packRecordIdStr, _ := currentData.Member.(string)
	packRecordId, _ := strconv.Atoi(packRecordIdStr)
	if packRecordId <= 0 {
		//不是有效的需删除,免得卡住所有
		dao.RemIconLive(currentData.Member)
		return 0, errors.New("获取到的不是有效packRecordId")
	}
	currentUnix := int(time.Now().Unix())
	if currentUnix < iconEndUnix {
		return 0, nil
	}
	return packRecordId, nil
}

// IconFinish 弹出礼包icon结束
func (p *PackService) IconFinish(packRecordID int) error {
	//1. 获取礼包记录
	record, err := p.GetPackRecord(packRecordID)
	if err != nil {
		return err
	}
	if record.PlayerId == 0 {
		return errors.New(fmt.Sprintf("未找到id=%d的礼包记录", packRecordID))
	}
	//2. 删除礼包所在有序集合，同时把内容放到消息推送中
	if err = dao.RemIconLive(packRecordID); err != nil {
		return err
	}
	var notifyService = NewNotifyService()
	return notifyService.PackIconFin(packRecordID, record.PlayerId)
}

func (p *PackService) GetPackRecord(packRecordID int) (*model.PlayerPack, error) {
	return dao.GetPackRecordById(packRecordID, []string{"player_id"})
}
