package logic

import (
	"app.yhyue.com/moapp/jybase/common"
	"app.yhyue.com/moapp/jybase/redis"
	"context"
	IC "jyBXSubscribe/rpc/init"
	"jyBXSubscribe/rpc/model"
	"strconv"
	"time"

	"jyBXSubscribe/rpc/internal/svc"
	"jyBXSubscribe/rpc/type/bxsubscribe"

	"github.com/zeromicro/go-zero/core/logx"
)

type GetSubSomeInfoLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewGetSubSomeInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetSubSomeInfoLogic {
	return &GetSubSomeInfoLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

// 获取订阅推送相关信息
func (l *GetSubSomeInfoLogic) GetSubSomeInfo(in *bxsubscribe.SomeInfoReq) (*bxsubscribe.SomeInfoResp, error) {
	resp := &bxsubscribe.SomeInfoResp{
		Data: &bxsubscribe.SomeInfo{
			HasKey:      false,
			IsInTSguide: false,
			IsExpire:    0,
			IsOnTail:    0,
			IsPassCount: false,
			OtherFlag:   false,
			IsRead:      false,
			Industry:    nil,
			UserId:      "",
		},
	}
	baseUserId, _ := strconv.ParseInt(in.NewUserId, 10, 64)
	//accountId, _ := strconv.ParseInt(in.AccountId, 10, 64)
	//positionType, _ := strconv.ParseInt(in.PositionType, 10, 64)
	//positionId, _ := strconv.ParseInt(in.PositionId, 10, 64)
	//entId, _ := strconv.ParseInt(in.EntId, 10, 64)
	//userInfo := IC.Compatible.Middleground.PowerCheckCenter.Check(in.AppId, in.UserId, baseUserId, accountId, entId, positionType, positionId)
	//logx.Info("userInfo:", userInfo)
	//P278 身份切换，切换企业 userId从代理header 获取的值是 职位id，所以改成用base_user_id 进行查user表信息
	user, _ := model.NewSubscribePush(in.UserType).UserInfo(baseUserId)
	//
	resp.Data.HasKey, resp.Data.Industry = model.GetKeySet(in.UserType, user, []string{})
	todayNum := time.Unix(time.Now().Unix(), 1).Format("20060102")
	if user != nil {
		//超级订阅
		if common.IntAll((*user)["i_vip_status"]) == 1 || common.IntAll((*user)["i_vip_status"]) == 2 {
			var threeRemind = int64(3 * 24 * 60 * 60)
			var twoRemind = int64(2 * 24 * 60 * 60)
			var oneRemind = int64(1 * 24 * 60 * 60)
			if (*user)["isread"] != nil {
				resp.Data.IsRead = (*user)["isread"].(bool)
			}
			resp.Data.IsPassCount = redis.GetInt("pushcache_2_a", "oncecount_"+todayNum+"_"+in.UserId) >= 2000
			resp.Data.IsOnTail = common.Int64All((*user)["i_vip_status"])
			_endtime := (*user)["l_vip_endtime"]
			//是否到期
			if common.Int64All(_endtime)-time.Now().Unix() < threeRemind && common.Int64All(_endtime)-time.Now().Unix() >= twoRemind {
				resp.Data.IsExpire = 3 //即将到期
			} else if common.Int64All(_endtime)-time.Now().Unix() < twoRemind && common.Int64All(_endtime)-time.Now().Unix() >= oneRemind {
				resp.Data.IsExpire = 2 //即将到期
			} else if common.Int64All(_endtime)-time.Now().Unix() < oneRemind && common.Int64All(_endtime)-time.Now().Unix() >= 0 {
				resp.Data.IsExpire = 1 //即将到期
			}
			//判断首次用户是否推送的带有”其他“
			t, _ := time.ParseInLocation("2006-01-02", time.Now().Format("2006-01-02"), time.Local)
			today_1 := t.Unix()
			today_2 := t.AddDate(0, 0, 1).Unix()
			//错误
			if IC.BaseServiceMysql.CountBySql("select count(1) as count from push.pushsubscribe where isvip =1 and userid =? and buyerclass=?  and (date between ? and ? )", common.InterfaceToStr(in.NewUserId), 93, today_1, today_2) > 0 {
				resp.Data.OtherFlag = true
			}
		} else {
			if (*user)["i_vip_status"] == nil {
				resp.Data.IsExpire = 0
			} else {
				resp.Data.IsOnTail = common.Int64All((*user)["i_vip_status"])
			}
			resp.Data.IsPassCount = redis.GetInt("pushcache_2_a", "oncecount_"+todayNum+"_"+in.UserId) >= 150
		}
		//是否进入向导查询
		resp.Data.IsInTSguide = func() bool {
			//付费用户无免费订阅，不进入订阅向导页面
			if common.IntAll((*user)["i_member_status"]) > 0 || common.IntAll((*user)["i_vip_status"]) > 0 {
				return false
			}
			o_jy, _ := (*user)["o_jy"].(map[string]interface{})
			iTsGuide := common.IntAll((*user)["i_ts_guide"])
			if iTsGuide == 2 || (iTsGuide == 0 && len(o_jy) == 0) {
				return true
			}
			return false
		}()
	}
	return resp, nil
}
