package model

import (
	"github.com/gogf/gf/v2/os/gtime"
)

type Task struct {
	Id           int64       `json:"id"           orm:"id"`
	TaskType     uint        `json:"taskType"     orm:"task_type"`
	Title        string      `json:"title"        orm:"title"`
	Description  string      `json:"description"  orm:"description"`
	RewardPoints uint        `json:"rewardPoints" orm:"reward_points"`
	Limit        uint        `json:"limit"        orm:"limit"`
	LimitType    int         `json:"limitType"    orm:"limit_type"`
	Status       int         `json:"status"       orm:"status"`
	StartTime    *gtime.Time `json:"startTime"    orm:"start_time"`
	EndTime      *gtime.Time `json:"endTime"      orm:"end_time"`
	CreatedAt    *gtime.Time `json:"createdAt"    orm:"created_at"`
	UpdatedAt    *gtime.Time `json:"updatedAt"    orm:"updated_at"`
	DeletedAt    *gtime.Time `json:"deletedAt"    orm:"deleted_at"`
}

type TaskListIn struct {
	Page   int
	Size   int
	Title  string // 可选，按标题模糊搜索
	Status int    // 可选，按状态筛选
}
type TaskListOut struct {
	Total int
	List  []Task
}

type TaskAddIn struct {
	TaskType     uint
	Title        string
	Description  string
	RewardPoints uint
	Limit        uint
	LimitType    int
	Status       int
	StartTime    *gtime.Time
	EndTime      *gtime.Time
}
type TaskEditIn struct {
	Id           int64
	TaskType     uint
	Title        string
	Description  string
	RewardPoints uint
	Limit        uint
	LimitType    int
	Status       int
	StartTime    *gtime.Time
	EndTime      *gtime.Time
}
type TaskDelIn struct {
	Id int64
}
type TaskCRUDOut struct {
	Success bool
}

// App端任务列表项，包含用户完成情况
// CompletedCount: 用户已完成次数
// IsCompleted: 用户今日/周期内是否已完成
// LastActionTime: 最近一次完成时间
type TaskAppListItem struct {
	Id             int64       `json:"id"             orm:"id"              dc:"任务ID"`
	TaskType       uint        `json:"taskType"       orm:"task_type"       dc:"任务类型：1=首次登录，2=广告，3=发布书籍"`
	Title          string      `json:"title"          orm:"title"           dc:"任务标题"`
	Description    string      `json:"description"    orm:"description"     dc:"任务描述"`
	RewardPoints   uint        `json:"rewardPoints"   orm:"reward_points"   dc:"完成任务奖励的积分数"`
	DailyLimit     uint        `json:"dailyLimit"     orm:"daily_limit"     dc:"每天可参与次数，NULL 表示不限"`
	LimitType      int         `json:"limitType"      orm:"limit_type"      dc:"限制类型：1=不限，2=每日，3=每周，4=仅一次"`
	Status         int         `json:"status"         orm:"status"          dc:"状态：1=启用，2=禁用"`
	StartTime      *gtime.Time `json:"startTime"      orm:"start_time"      dc:"任务开始时间"`
	EndTime        *gtime.Time `json:"endTime"        orm:"end_time"        dc:"任务结束时间"`
	CompletedCount int         `json:"completedCount" orm:"-"               dc:"用户已完成次数"`
	IsCompleted    bool        `json:"isCompleted"    orm:"-"               dc:"是否已完成"`
	LastActionTime *gtime.Time `json:"lastActionTime" orm:"-"               dc:"最近完成时间"`
}

type TaskAppListOut struct {
	List []TaskAppListItem `json:"list"`
}

// App端任务列表查询参数
type TaskAppListIn struct {
	UserId int64 `json:"userId" dc:"用户ID"`
}

// 简化的任务列表项，只包含任务类型和奖励积分
type TaskSimpleItem struct {
	TaskType     uint `json:"taskType"     orm:"task_type"     dc:"任务类型：1=首次登录，2=广告，3=发布书籍"`
	RewardPoints uint `json:"rewardPoints" orm:"reward_points"   dc:"完成任务奖励的积分数"`
}

type TaskSimpleListOut struct {
	List []TaskSimpleItem `json:"list"`
}
