package dto

import "quyun/v2/app/requests"

type ContentListFilter struct {
	// Pagination 分页参数（page/limit）。
	requests.Pagination
	// Keyword 关键词搜索（匹配标题/摘要/描述）。
	Keyword *string `query:"keyword"`
	// Genre 内容类型/分类筛选。
	Genre *string `query:"genre"`
	// TenantID 租户ID筛选（内容所属店铺）。
	TenantID *int64 `query:"tenant_id"`
	// AuthorID 作者用户ID筛选（用于筛选创作者作品）。
	AuthorID *int64 `query:"author_id"`
	// Sort 排序规则（latest/hot/price_asc）。
	Sort *string `query:"sort"`
	// IsPinned 置顶内容筛选（true 仅返回置顶）。
	IsPinned *bool `query:"is_pinned"`
	// PriceType 价格类型筛选（free/paid）。
	PriceType *string `query:"price_type"`
}

type ContentItem struct {
	// ID 内容唯一ID。
	ID int64 `json:"id"`
	// TenantID 内容所属租户ID。
	TenantID int64 `json:"tenant_id"`
	// UserID 内容作者用户ID（与 author_id 同义，便于后台展示）。
	UserID int64 `json:"user_id"`
	// Title 内容标题。
	Title string `json:"title"`
	// Cover 封面URL（无封面时为空）。
	Cover string `json:"cover"`
	// Genre 内容分类/风格标签。
	Genre string `json:"genre"`
	// Type 内容媒体类型（video/audio/article）。
	Type string `json:"type"`
	// Status 内容状态（如 published/unpublished）。
	Status string `json:"status"`
	// Visibility 内容可见性（如 public/tenant_only/private）。
	Visibility string `json:"visibility"`
	// Price 价格（单位元，免费为 0）。
	Price float64 `json:"price"`
	// AuthorID 作者用户ID。
	AuthorID int64 `json:"author_id"`
	// AuthorName 作者展示名（优先昵称）。
	AuthorName string `json:"author_name"`
	// AuthorAvatar 作者头像URL。
	AuthorAvatar string `json:"author_avatar"`
	// AuthorIsFollowing 当前用户是否关注作者（未登录默认 false）。
	AuthorIsFollowing bool `json:"author_is_following"`
	// Views 浏览量统计。
	Views int `json:"views"`
	// Likes 点赞数统计。
	Likes int `json:"likes"`
	// CreatedAt 创建时间（RFC3339 格式）。
	CreatedAt string `json:"created_at"`
	// PublishedAt 发布时间，未发布为空。
	PublishedAt string `json:"published_at"`
	// IsPurchased 是否已购买（用于内容列表快速判断）。
	IsPurchased bool `json:"is_purchased"`
}

type ContentDetail struct {
	ContentItem
	// Description 内容描述（用于详情页摘要）。
	Description string `json:"description"`
	// Body 详细正文/图文内容（文章类可为空）。
	Body string `json:"body"`
	// MediaUrls 关联媒体资源（音频/视频/预览）。
	MediaUrls []MediaURL `json:"media_urls"`
	// Meta 内容元信息（曲风/调性/节拍等）。
	Meta Meta `json:"meta"`
	// IsLiked 当前用户是否点赞。
	IsLiked bool `json:"is_liked"`
	// IsFavorited 当前用户是否收藏。
	IsFavorited bool `json:"is_favorited"`
}

type MediaURL struct {
	// Type 媒体类型（audio/video/image/preview）。
	Type string `json:"type"`
	// URL 媒体资源地址。
	URL string `json:"url"`
	// Duration 媒体时长（秒），无时长则为 0。
	Duration int `json:"duration"`
}

type Meta struct {
	// Role 内容角色/定位（如 demo/主稿）。
	Role string `json:"role"`
	// Key 音乐调性或主音。
	Key string `json:"key"`
	// Beat 节拍信息（如 4/4）。
	Beat string `json:"beat"`
}

type Comment struct {
	// ID 评论ID。
	ID int64 `json:"id"`
	// Content 评论内容。
	Content string `json:"content"`
	// UserID 评论用户ID。
	UserID int64 `json:"user_id"`
	// UserNickname 评论用户昵称。
	UserNickname string `json:"user_nickname"`
	// UserAvatar 评论用户头像。
	UserAvatar string `json:"user_avatar"`
	// CreateTime 评论创建时间（RFC3339）。
	CreateTime string `json:"create_time"`
	// Likes 评论点赞数。
	Likes int `json:"likes"`
	// IsLiked 当前用户是否点赞该评论。
	IsLiked bool `json:"is_liked"`
	// ReplyTo 回复的评论ID（0 表示一级评论）。
	ReplyTo int64 `json:"reply_to"`
}

type CommentCreateForm struct {
	// Content 评论正文，不能为空。
	Content string `json:"content"`
	// ReplyTo 被回复评论ID（0 表示一级评论）。
	ReplyTo int64 `json:"reply_to"`
}

type Topic struct {
	// ID 专题ID。
	ID int64 `json:"id"`
	// Title 专题标题。
	Title string `json:"title"`
	// Cover 专题封面图。
	Cover string `json:"cover"`
	// Tag 专题标签（用于筛选/展示）。
	Tag string `json:"tag"`
	// Count 专题内内容数量。
	Count int `json:"count"`
}

type ContentPrice struct {
	// Currency 币种（CNY 等）。
	Currency string `json:"currency"`
	// PriceAmount 原价金额（单位元）。
	PriceAmount float64 `json:"price_amount"`
	// DiscountType 折扣类型（amount/percent）。
	DiscountType string `json:"discount_type"`
	// DiscountValue 折扣值（amount=元，percent=百分比）。
	DiscountValue float64 `json:"discount_value"`
	// DiscountStartAt 折扣开始时间（RFC3339）。
	DiscountStartAt string `json:"discount_start_at"`
	// DiscountEndAt 折扣结束时间（RFC3339）。
	DiscountEndAt string `json:"discount_end_at"`
}
