package model

import (
	"fmt"
	"sync"
	"time"

	"git.jiaxianghudong.com/go/logs"
	"git.jiaxianghudong.com/webs/pkg/dbx"
)

//ActiveCache 调用到的活动缓存
var ActiveCache sync.Map

//ActiveCacheArr 所有活动数组缓存
var ActiveCacheArr sync.Map

// ActiveSwitchAll 活动
type ActiveSwitchAll struct {
	ID            string `sql:"id" json:"id"`
	Title         string `sql:"title" json:"title"`
	Status        string `sql:"status" json:"status"`                   // `status` tinyint(2) DEFAULT '0' COMMENT '0关闭，1开启',
	ActiveID      string `sql:"active_id" json:"active_id"`             // `active_id` varchar(100) DEFAULT NULL COMMENT '关联活动标签符',
	OpenCondition string `sql:"open_condition" json:"open_condition"`   // `open_condition` text CHARACTER SET utf32 COMMENT 'app_id,channel_id和地区的组合，空表示全部',
	OpenTimes     string `sql:"open_times" json:"open_times"`           // `open_times` varchar(999) DEFAULT NULL COMMENT '开启时间，空表示全部',
	BeginShowTime string `sql:"begin_show_time" json:"begin_show_time"` // `begin_show_time` varchar(55) NOT NULL COMMENT '循环显示开始时间',
	EndShowTime   string `sql:"end_show_time" json:"end_show_time"`     // `end_show_time` varchar(55) NOT NULL COMMENT '循环显示时结束间',
	BeginShowDate string `sql:"begin_show_date" json:"begin_show_date"` // `begin_show_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '指定显示开始日期时间',
	EndShowDate   string `sql:"end_show_date" json:"end_show_date"`     // `end_show_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '指定显示结束日期时间',
	IsDebug       string `sql:"is_debug" json:"is_debug"`               // `is_debug` int(2) NOT NULL DEFAULT '0' COMMENT '是否测试 0否 1是',
	Sort          string `sql:"sort" json:"sort"`                       // `sort` int(11) NOT NULL DEFAULT '0' COMMENT '排序',
	IsTimeOffOn   string `sql:"istimeoffon" json:"istimeoffon"`         // `istimeoffon` int(2) NOT NULL DEFAULT '0' COMMENT '显示模式：1循环模式 2：指定模式'';',
	Push          string `sql:"push" json:"push"`                       // `push` int(2) NOT NULL DEFAULT '0' COMMENT '0为不推送1为推送',
	RuleTitle     string `sql:"rule_title" json:"rule_title"`           // `rule_title` varchar(55) NOT NULL COMMENT '活动规则标题',
	Rule          string `sql:"rule" json:"rule"`                       // `rule` text NOT NULL COMMENT '活动规则',
	Grade         string `sql:"grade" json:"grade"`                     // `grade` varchar(50) NOT NULL COMMENT '档位',
	GradeRatio    string `sql:"grade_ratio" json:"grade_ratio"`         // `grade_ratio` varchar(50) NOT NULL COMMENT '档位对应百分比',
	Data          string `sql:"data" json:"data"`
}

// Get 获取全部活动数据
func (m ActiveSwitchAll) Get(typeName string) (ActiveSwitchAll, error) {
	sql := fmt.Sprintf("SELECT id,title,status,active_id,open_condition,open_times,begin_show_time,end_show_time,begin_show_date,end_show_date,is_debug,sort,istimeoffon,push,rule_title,rule,grade,grade_ratio,data  FROM `ext`.`active_switch` WHERE active_id='%v'", typeName)
	queryResult := dbx.MySQLExt.QueryRow(sql)

	if nil == queryResult {
		return m, nil
	}
	err := queryResult.Scan(&m.ID, &m.Title, &m.Status, &m.ActiveID, &m.OpenCondition, &m.OpenTimes, &m.BeginShowTime, &m.EndShowTime, &m.BeginShowDate, &m.EndShowDate,
		&m.IsDebug, &m.Sort, &m.IsTimeOffOn, &m.Push, &m.RuleTitle, &m.Rule, &m.Grade, &m.GradeRatio, &m.Data)

	if nil != err && "sql: no rows in result set" != err.Error() {
		logs.Error("活动数据获取失败,活动ID：", typeName, ",错误:", err.Error())
		return m, err
	}
	return m, nil
}

//GetActiveSwitch 获取可用活动开关配置列表
func GetActiveSwitch() ([]ActiveSwitchAll, error) {
	var switchs []ActiveSwitchAll
	sql := fmt.Sprintf("select * from `ext`.`active_switch` where  status =1 and end_show_date >= '%s' ORDER BY id DESC", time.Now().Format("2006-01-02 15:04:05"))
	err := dbx.MySQLExt.Query2(sql, &switchs)
	if err != nil {
		logs.Errorf(" select * from `ext`.`active_switch` where  status =1 and end_show_date >= ? ORDER BY id DESC err:%v", err)
		return nil, err
	}

	return switchs, nil
}
