package md

import (
	md "applet/app/md/member_center"
	"code.fnuoos.com/EggPlanet/egg_models.git/src/model"
)

type NoticeListReq struct {
	Page  string `json:"page,required"`  // 页数
	Limit string `json:"limit,required"` // 每页大小
}
type NoticeListResp struct {
	Total      int64               `json:"total"`
	SelectData []map[string]string `json:"select_data"`
	ChangeData []map[string]string `json:"change_data"`
	List       []NoticeList        `json:"list"`
}
type NoticeList struct {
	Id        string `json:"id"`
	Title     string `json:"title"`
	Content   string `json:"content"`
	Type      string `json:"type"`
	JpushOpen string `json:"jpush_open" example:"app推送开启 0关 1开"`
	SmsOpen   string `json:"sms_open" example:"短信推送开启 0关 1开"`
	SmsCode   string `json:"sms_code" example:"短信模板id"`
	Day       string `json:"day" example:" xxx小时(未签到/未登录) 隔 xx小时通知一次 (这里是 X小时,type=sign/login 的时候要显示前面的话填写 sign是未签到 login是未登录)"`
	NoticeDay string `json:"notice_day" example:" xxx小时(未签到/未登录) 隔  xx小时通知一次 (这里是 隔  xx小时,type=sign/login 的时候要显示前面的话填写 sign是未签到 login是未登录)"`
}
type NoticeSaveReq struct {
	Id        string `json:"id"`
	Title     string `json:"title"`
	Content   string `json:"content"`
	Type      string `json:"type"`
	JpushOpen string `json:"jpush_open" example:"app推送开启 0关 1开"`
	SmsOpen   string `json:"sms_open" example:"短信推送开启 0关 1开"`
	SmsCode   string `json:"sms_code" example:"短信模板id"`
	Day       string `json:"day" example:" xxx小时(未签到/未登录) 隔 xx小时通知一次 (这里是 X小时,type=sign/login 的时候要显示前面的话填写 sign是未签到 login是未登录)"`
	NoticeDay string `json:"notice_day" example:" xxx小时(未签到/未登录) 隔  xx小时通知一次 (这里是 隔  xx小时,type=sign/login 的时候要显示前面的话填写 sign是未签到 login是未登录)"`
}
type NoticeDelReq struct {
	Id []string `json:"id"`
}
type NoticePushListResp struct {
	Total        int64               `json:"total"`
	PlatformData []map[string]string `json:"platform_data"`
	TargetData   []map[string]string `json:"target_data"`
	List         []NoticePushList    `json:"list"`
}
type NoticePushList struct {
	Id            string `json:"id"`
	Title         string `json:"title"`
	Content       string `json:"content"`
	Platform      string `json:"platform"`
	Target        string `json:"target"`
	SendType      string `json:"send_type" example:"0立即推送 1定时推送"`
	SendStartTime string `json:"send_start_time" example:"如 2024-11-25 11:56:00"`
	SendEndTime   string `json:"send_end_time" example:"如 2024-11-25 11:56:00"`
	State         string `json:"state"  example:"0待发送 1发送成功"`
}
type NoticePushSaveReq struct {
	Id            string   `json:"id"`
	Title         string   `json:"title"`
	Content       string   `json:"content"`
	Platform      string   `json:"platform"`
	Target        string   `json:"target"`
	SendType      string   `json:"send_type"`
	SendStartTime string   `json:"send_start_time"`
	SendEndTime   string   `json:"send_end_time"`
	UserList      []string `json:"user_list"`
	TagList       []string `json:"tag_list"`
	Level         []string `json:"level"`
}

type NoticeAliyunSmsListReq struct {
	Page  string `json:"page,required"`  // 页数
	Limit string `json:"limit,required"` // 每页大小
}
type NoticeAliyunSmsListResp struct {
	Total      int64                 `json:"total"`
	SelectData []map[string]string   `json:"select_data"`
	List       []NoticeAliyunSmsList `json:"list"`
}
type NoticeAliyunSmsList struct {
	Id        string `json:"id"`
	Title     string `json:"title"`
	Content   string `json:"content" example:"这是 填短信模板id"`
	Type      string `json:"type"`
	IsShow    string `json:"is_show"`
	Day       string `json:"day" example:" xxx小时(未签到/未登录) 隔 xx小时通知一次 (这里是 X小时,type=sign/login 的时候要显示前面的话填写 sign是未签到 login是未登录)"`
	NoticeDay string `json:"notice_day" example:" xxx小时(未签到/未登录) 隔  xx小时通知一次 (这里是 隔  xx小时,type=sign/login 的时候要显示前面的话填写 sign是未签到 login是未登录)"`
}
type NoticeAliyunSmsSaveReq struct {
	Id        string `json:"id"`
	Title     string `json:"title"`
	Content   string `json:"content"`
	IsShow    string `json:"is_show"`
	Type      string `json:"type"`
	Day       string `json:"day" example:" xxx小时(未签到/未登录) 隔 xx小时通知一次 (这里是 X小时,type=sign/login 的时候要显示前面的话填写 sign是未签到 login是未登录)"`
	NoticeDay string `json:"notice_day" example:" xxx小时(未签到/未登录) 隔  xx小时通知一次 (这里是 隔  xx小时,type=sign/login 的时候要显示前面的话填写 sign是未签到 login是未登录)"`
}
type NoticeAliyunSmsDelReq struct {
	Id []string `json:"id"`
}
type NoticeAliyunSmsPushListResp struct {
	Total      int64                     `json:"total"`
	TargetData []map[string]string       `json:"target_data"`
	List       []NoticeAliyunSmsPushList `json:"list"`
}
type NoticeAliyunSmsPushList struct {
	Id       string `json:"id"`
	Title    string `json:"title"`
	Content  string `json:"content"`
	Target   string `json:"target"`
	CreateAt string `json:"create_at"`
	SmsCode  string `json:"sms_code"`
	State    string `json:"state"  example:"0待发送 1发送成功"`
}
type NoticeAliyunSmsPushSaveReq struct {
	Id        string   `json:"id"`
	Title     string   `json:"title"`
	Content   string   `json:"content"`
	Target    string   `json:"target"`
	SmsCode   string   `json:"sms_code"`
	PhoneList []string `json:"phone_list"`
	TagList   []string `json:"tag_list"`
	Level     []string `json:"level"`
}

type Paginate struct {
	Limit int   `json:"limit"` // 每页大小
	Page  int   `json:"page"`  // 页数
	Total int64 `json:"total"` // 总数据量
}

type JPushGetUserListResp struct {
	LevelsList []map[string]interface{} `json:"levels_list"` // 等级列表
	TagsList   []map[string]interface{} `json:"tags_list"`   // 标签列表
	StateList  []map[string]interface{} `json:"state_list"`  // 状态列表
	List       []GetUserListNode        `json:"list"`
	Paginate   Paginate                 `json:"paginate"` // 分页信息
}

type TagNode struct {
	TagID   int    `json:"tag_id"`   // 标签 ID
	TagName string `json:"tag_name"` // 标签名称
}
type LevelCount struct {
	Level int `xorm:"level"`
	Count int `xorm:"count"`
}

type GetUserListNode struct {
	ID               int64     `json:"id"`           // 会员 ID
	Tag              []TagNode `json:"tag"`          // 会员标签
	Sex              int       `json:"sex"`          // 性别(0:未知 1:男 2:女)
	Avatar           string    `json:"avatar"`       // 头像
	Nickname         string    `json:"nickname"`     // 昵称
	Phone            string    `json:"phone"`        // 手机号
	IsRealName       int       `json:"is_real_name"` // 是否实名 0.未实名,1.已实名
	LevelName        string    `json:"level_name"`   // 会员等级
	InviteCode       string    `json:"invite_code" example:"会员邀请码"`
	ParentID         int64     `json:"parent_id"` // 推荐人 ID
	ParentInviteCode string    `json:"parent_invite_code" example:"推荐人邀请码"`
	ParentPhone      string    `json:"parent_phone" example:"推荐人手机号"`
	RegisterTime     string    `json:"register_time"` // 注册时间
	Memo             string    `json:"memo"`          // 备注
	Wechat           string    `json:"wechat"`        // 微信号
	RegisterType     int       `json:"register_type"` // 注册类型
	State            int       `json:"state"`         // 状态
	LastLoginAt      string    `json:"last_login_at"` // 最后登录时间
}

type JPushGetUserListReq struct {
	ID               int64  `json:"id"` // 会员 ID
	Nickname         string `json:"nickname" example:"会员昵称"`
	RecommendID      int64  `json:"recommend_id"` // 推荐人 ID
	Tag              int    `json:"tag"`          // 标签 id
	Phone            string `json:"phone" example:"会员手机号"`
	InviteCode       string `json:"invite_code" example:"会员邀请码"`
	ParentInviteCode string `json:"parent_invite_code" example:"上级邀请码"`
	ParentPhone      string `json:"parent_phone" example:"上级手机号"`
	Sex              int    `json:"sex"` // 性别(0:未知 1:男 2:女)
	UnionId          string `json:"union_id" example:"微信号"`
	Level            int    `json:"level"`           // 会员等级
	RegisterType     int    `json:"register_type"`   // 注册类型(1:APP注册、2:H5注册)
	State            int    `json:"state"`           // 状态
	Effective        int    `json:"effective"`       // 有效会员
	IsRealName       int    `json:"is_real_name"`    // 是否实名 0.未实名,1.已实名
	Memo             string `json:"memo"`            // 备注
	RegisterBefore   string `json:"register_before"` // 注册时间起点
	RegisterAfter    string `json:"register_after"`  // 注册时间终点
	LoginBefore      string `json:"login_before"`    // 最近登录开始时间
	LoginAfter       string `json:"login_after"`     // 最近登录结束时间
	Page             int    `json:"page,required"`
	Limit            int    `json:"limit,required"`
}

type UserInfo struct {
	model.User             `xorm:"extends"`
	TagID                  int    `xorm:"tag_id"`
	ParentPhone            string `xorm:"parent_phone"`
	ParentSystemInviteCode string `xorm:"parent_system_invite_code"`
	ParentCustomInviteCode string `xorm:"parent_custom_invite_code"`
}

type JPushGetTagListResp struct {
	List     []md.TagListNode `json:"list"`
	Paginate Paginate         `json:"paginate"`
}

type JPushGetLevelListResp struct {
	List     []md.LevelListNode `json:"list"`
	Paginate Paginate           `json:"paginate"`
}

type AliyunSmsGetUserListResp struct {
	LevelsList []map[string]interface{} `json:"levels_list"` // 等级列表
	TagsList   []map[string]interface{} `json:"tags_list"`   // 标签列表
	StateList  []map[string]interface{} `json:"state_list"`  // 状态列表
	List       []GetUserListNode        `json:"list"`
	Paginate   Paginate                 `json:"paginate"` // 分页信息
}

type AliyunSmsUserListReq struct {
	ID               int64  `json:"id"` // 会员 ID
	Nickname         string `json:"nickname" example:"会员昵称"`
	RecommendID      int64  `json:"recommend_id"` // 推荐人 ID
	Tag              int    `json:"tag"`          // 标签 id
	Phone            string `json:"phone" example:"会员手机号"`
	InviteCode       string `json:"invite_code" example:"会员邀请码"`
	ParentInviteCode string `json:"parent_invite_code" example:"上级邀请码"`
	ParentPhone      string `json:"parent_phone" example:"上级手机号"`
	Sex              int    `json:"sex"` // 性别(0:未知 1:男 2:女)
	UnionId          string `json:"union_id" example:"微信号"`
	Level            int    `json:"level"`           // 会员等级
	RegisterType     int    `json:"register_type"`   // 注册类型(1:APP注册、2:H5注册)
	State            int    `json:"state"`           // 状态
	Effective        int    `json:"effective"`       // 有效会员
	IsRealName       int    `json:"is_real_name"`    // 是否实名 0.未实名,1.已实名
	Memo             string `json:"memo"`            // 备注
	RegisterBefore   string `json:"register_before"` // 注册时间起点
	RegisterAfter    string `json:"register_after"`  // 注册时间终点
	LoginBefore      string `json:"login_before"`    // 最近登录开始时间
	LoginAfter       string `json:"login_after"`     // 最近登录结束时间
	Page             int    `json:"page,required"`
	Limit            int    `json:"limit,required"`
}

type AliyunSmsGetTagListResp struct {
	List     []md.TagListNode `json:"list"`
	Paginate Paginate         `json:"paginate"`
}

type AliyunSmsGetLevelListResp struct {
	List     []md.LevelListNode `json:"list"`
	Paginate Paginate           `json:"paginate"`
}

func (req JPushGetUserListReq) ToUserMemberRequest() *md.UserManagementGetUserListReq {
	return &md.UserManagementGetUserListReq{
		ID:               req.ID,
		Nickname:         req.Nickname,
		RecommendID:      req.RecommendID,
		Tag:              req.Tag,
		Phone:            req.Phone,
		InviteCode:       req.InviteCode,
		ParentInviteCode: req.ParentInviteCode,
		ParentPhone:      req.ParentPhone,
		Sex:              req.Sex,
		UnionId:          req.UnionId,
		Level:            req.Level,
		RegisterType:     req.RegisterType,
		State:            req.State,
		Effective:        req.Effective,
		IsRealName:       req.IsRealName,
		Memo:             req.Memo,
		RegisterBefore:   req.RegisterBefore,
		RegisterAfter:    req.RegisterAfter,
		LoginBefore:      req.LoginBefore,
		LoginAfter:       req.LoginAfter,
		Page:             req.Page,
		Limit:            req.Limit,
	}
}

func (req AliyunSmsUserListReq) ToUserMemberRequest() *md.UserManagementGetUserListReq {
	return &md.UserManagementGetUserListReq{
		ID:               req.ID,
		Nickname:         req.Nickname,
		RecommendID:      req.RecommendID,
		Tag:              req.Tag,
		Phone:            req.Phone,
		InviteCode:       req.InviteCode,
		ParentInviteCode: req.ParentInviteCode,
		ParentPhone:      req.ParentPhone,
		Sex:              req.Sex,
		UnionId:          req.UnionId,
		Level:            req.Level,
		RegisterType:     req.RegisterType,
		State:            req.State,
		Effective:        req.Effective,
		IsRealName:       req.IsRealName,
		Memo:             req.Memo,
		RegisterBefore:   req.RegisterBefore,
		RegisterAfter:    req.RegisterAfter,
		LoginBefore:      req.LoginBefore,
		LoginAfter:       req.LoginAfter,
		Page:             req.Page,
		Limit:            req.Limit,
	}
}