package withdrawal

import (
	"time"
)

// 用户端 DTO
type WithdrawalDTO struct {
	ID               uint64     `json:"id"`
	WithdrawNo       string     `json:"withdraw_no"`
	UserID           uint64     `json:"user_id"`
	AmountCent       int64      `json:"amount_cent"`
	FeeCent          int64      `json:"fee_cent"`
	ActualAmountCent int64      `json:"actual_amount_cent"`
	AccountType      string     `json:"account_type"`
	AccountName      string     `json:"account_name"`
	AccountNo        string     `json:"account_no"` // 脱敏
	BankName         string     `json:"bank_name"`
	Status           string     `json:"status"`
	ReviewRemark     string     `json:"review_remark"`
	CreatedAt        time.Time  `json:"created_at"`
	UpdatedAt        time.Time  `json:"updated_at"`
	ReviewedAt       *time.Time `json:"reviewed_at"`
	PaidAt           *time.Time `json:"paid_at"`
}

// 管理员端详细 DTO
type WithdrawalDetailDTO struct {
	ID               uint64     `json:"id"`
	WithdrawNo       string     `json:"withdraw_no"`
	UserID           uint64     `json:"user_id"`
	UserNickname     string     `json:"user_nickname"`
	UserPhone        string     `json:"user_phone"`
	AmountCent       int64      `json:"amount_cent"`
	FeeCent          int64      `json:"fee_cent"`
	ActualAmountCent int64      `json:"actual_amount_cent"`
	PaymentAccountID *uint64    `json:"payment_account_id"`
	AccountType      string     `json:"account_type"`
	AccountName      string     `json:"account_name"`
	AccountNo        string     `json:"account_no"` // 管理员可见完整账号
	BankName         string     `json:"bank_name"`
	BankBranch       string     `json:"bank_branch"`
	CertificateURLs  []string   `json:"certificate_urls"` // 收款二维码图片
	Status           string     `json:"status"`
	ReviewedBy       *uint64    `json:"reviewed_by"`
	ReviewedByName   string     `json:"reviewed_by_name"`
	ReviewedAt       *time.Time `json:"reviewed_at"`
	ReviewRemark     string     `json:"review_remark"`
	PaidBy           *uint64    `json:"paid_by"`
	PaidByName       string     `json:"paid_by_name"`
	PaidAt           *time.Time `json:"paid_at"`
	PaymentProofURL  string     `json:"payment_proof_url"`
	PaymentRemark    string     `json:"payment_remark"`
	CreatedAt        time.Time  `json:"created_at"`
	UpdatedAt        time.Time  `json:"updated_at"`
}

type CreateWithdrawalRequest struct {
	PaymentAccountID uint64 `json:"payment_account_id" binding:"required"`
	AmountCent       int64  `json:"amount_cent" binding:"required,gt=0"`
}

type ReviewWithdrawalRequest struct {
	Approved *bool  `json:"approved" binding:"required"`
	Remark   string `json:"remark"`
}

type ConfirmPaymentRequest struct {
	PaymentProofURL string `json:"payment_proof_url"`
	Remark          string `json:"remark"`
}

type PaginatedResult struct {
	Items    []WithdrawalDTO `json:"items"`
	Total    int64           `json:"total"`
	Page     int             `json:"page"`
	PageSize int             `json:"page_size"`
}

type AdminPaginatedResult struct {
	Items    []WithdrawalDetailDTO `json:"items"`
	Total    int64                 `json:"total"`
	Page     int                   `json:"page"`
	PageSize int                   `json:"page_size"`
}

type AdminListQuery struct {
	Status string `form:"status"`
	UserID uint64 `form:"user_id"`
	Page   int    `form:"page"`
	Size   int    `form:"page_size"`
}
