package forms

type ARTableTriggerResponse struct {
	Key    string `json:"key"`
	Status string `json:"status,omitempty"`
}

type ARTableExportQuery struct {
	Year  int    `form:"year" json:"year" binding:"required"`
	Month int    `form:"month" json:"month" binding:"required"`
	Type  string `form:"type" json:"type" binding:"required,oneof=actual estimated"`
}

type ARTableExportStatusResponse struct {
	Key       string `json:"key"`
	Status    string `json:"status"`
	StartedAt string `json:"started_at,omitempty"`
	TimeoutAt string `json:"timeout_at,omitempty"`
}

type ARTableExportDownloadResponse struct {
	Key string `json:"key"`
	URL string `json:"url"`
}

// ARTableListQuery is the query parameters for listing AR table records with pagination and filters.
type ARTableListQuery struct {
	Year                  int    `form:"year" json:"year"`
	Month                 int    `form:"month" json:"month"`
	IsEstimated           *bool  `form:"is_estimated" json:"is_estimated"`
	TenantID              *uint  `form:"tenant_id" json:"tenant_id"`
	PaymentType           string `form:"payment_type" json:"payment_type"`
	BindedBillingConfigID *uint  `form:"binded_billing_config_id" json:"binded_billing_config_id"`
	Page                  int    `form:"page,default=1,min=1,max=100" json:"page"`
	PageSize              int    `form:"page_size,default=20,min=1,max=100" json:"page_size"`
}

// ARTableCreateInput is the request body for creating an AR table record.
// Primary key (ID) and auto-managed fields (created_at, updated_at, deleted_at) are not allowed.
type ARTableCreateInput struct {
	TenantID                           uint     `json:"tenant_id,string" binding:"required"`
	PartnerID                          string   `json:"partner_id"`
	PaymentCode                        string   `json:"payment_code"`
	PaymentType                        string   `json:"payment_type" binding:"required"`
	BillMonth                          string   `json:"bill_month" binding:"required"`
	StartDate                          string   `json:"start_date"`
	EndDate                            string   `json:"end_date"`
	BindedBillingConfigID              uint     `json:"binded_billing_config_id,string" binding:"required"`
	IsEstimated                        bool     `json:"is_estimated"`
	StripeAmount                       []string `json:"stripe_amount"`
	StripeTaxRate                      []string `json:"stripe_tax_rate"`
	StripeAmountIncludingTax           []string `json:"stripe_amount_including_tax"`
	StripeInvoiceNumber                []string `json:"stripe_invoice_number"`
	WireTransferAmount                 string   `json:"wire_transfer_amount"`
	MarketplaceAmount                  string   `json:"marketplace_amount"`
	PrepaymentCredits                  string   `json:"prepayment_credits"`
	TotalAmount                        string   `json:"total_amount"`
	InvoiceAmount                      string   `json:"invoice_amount"`
	StripeInvoice                      []string `json:"stripe_invoice"`
	StripeInvoicePaid                  []string `json:"stripe_invoice_paid"`
	StripeInvoiceFinalizedDate         []string `json:"stripe_invoice_finalized_date"`
	StripeInvoicePaidDate              []string `json:"stripe_invoice_paid_date"`
	RawServerlessAmount                string   `json:"raw_serverless_amount"`
	RawDedicatedAmount                 string   `json:"raw_dedicated_amount"`
	RawStarterAmount                   string   `json:"raw_starter_amount"`
	RawEssentialAmount                 string   `json:"raw_essential_amount"`
	RawSupportAmount                   string   `json:"raw_support_amount"`
	RawPremiumAmount                   string   `json:"raw_premium_amount"`
	RawLakeAmount                      string   `json:"raw_lake_amount"`
	RawBYOCAmount                      string   `json:"raw_byoc_amount"`
	RawServerlessProgramCreditsAmount  string   `json:"raw_serverless_program_credits_amount"`
	RawDedicatedProgramCreditsAmount   string   `json:"raw_dedicated_program_credits_amount"`
	RawStarterProgramCreditsAmount     string   `json:"raw_starter_program_credits_amount"`
	RawEssentialProgramCreditsAmount   string   `json:"raw_essential_program_credits_amount"`
	RawSupportProgramCreditsAmount     string   `json:"raw_support_program_credits_amount"`
	RawPremiumProgramCreditsAmount     string   `json:"raw_premium_program_credits_amount"`
	RawLakeProgramCreditsAmount        string   `json:"raw_lake_program_credits_amount"`
	RawBYOCProgramCreditsAmount        string   `json:"raw_byoc_program_credits_amount"`
	RawServerlessRedeemCreditsAmount   string   `json:"raw_serverless_redeem_credits_amount"`
	RawDedicatedRedeemCreditsAmount    string   `json:"raw_dedicated_redeem_credits_amount"`
	RawStarterRedeemCreditsAmount      string   `json:"raw_starter_redeem_credits_amount"`
	RawEssentialRedeemCreditsAmount    string   `json:"raw_essential_redeem_credits_amount"`
	RawSupportRedeemCreditsAmount      string   `json:"raw_support_redeem_credits_amount"`
	RawPremiumRedeemCreditsAmount      string   `json:"raw_premium_redeem_credits_amount"`
	RawLakeRedeemCreditsAmount         string   `json:"raw_lake_redeem_credits_amount"`
	RawBYOCRedeemCreditsAmount         string   `json:"raw_byoc_redeem_credits_amount"`
	RawServerlessCustomerSuccessAmount string   `json:"raw_serverless_customer_success_amount"`
	RawDedicatedCustomerSuccessAmount  string   `json:"raw_dedicated_customer_success_amount"`
	RawStarterCustomerSuccessAmount    string   `json:"raw_starter_customer_success_amount"`
	RawEssentialCustomerSuccessAmount  string   `json:"raw_essential_customer_success_amount"`
	RawSupportCustomerSuccessAmount    string   `json:"raw_support_customer_success_amount"`
	RawPremiumCustomerSuccessAmount    string   `json:"raw_premium_customer_success_amount"`
	RawLakeCustomerSuccessAmount       string   `json:"raw_lake_customer_success_amount"`
	RawBYOCCustomerSuccessAmount       string   `json:"raw_byoc_customer_success_amount"`
	ChannelLossAmount                  string   `json:"channel_loss_amount"`
	ServerlessAllocatedLoss            string   `json:"serverless_allocated_loss"`
	DedicatedAllocatedLoss             string   `json:"dedicated_allocated_loss"`
	StarterAllocatedLoss               string   `json:"starter_allocated_loss"`
	EssentialAllocatedLoss             string   `json:"essential_allocated_loss"`
	SupportAllocatedLoss               string   `json:"support_allocated_loss"`
	PremiumAllocatedLoss               string   `json:"premium_allocated_loss"`
	LakeAllocatedLoss                  string   `json:"lake_allocated_loss"`
	BYOCAllocatedLoss                  string   `json:"byoc_allocated_loss"`
	CPPODiscountableProductAmount      string   `json:"cppo_discountable_product_amount"`
	CPPONonDiscountableProductAmount   string   `json:"cppo_non_discountable_product_amount"`
	DedicatedAccrualAmount             string   `json:"dedicated_accrual_amount"`
	SupportAccrualAmount               string   `json:"support_accrual_amount"`
}

// ARTableUpdateInput is the request body for updating an AR table record.
// All fields are optional; only non-zero fields will be updated. ID (primary key) is not allowed.
type ARTableUpdateInput ARTableCreateInput

// ARTableRecordResponse is the swag-compatible response DTO for a single AR table record.
// It mirrors entity.ARTableRecord but without gorm.Model embedding (which swag cannot parse).
type ARTableRecordResponse struct {
	ID                                 uint     `json:"id,string" example:"1"`
	CreatedAt                          string   `json:"created_at" example:"2025-01-01T00:00:00Z"`
	UpdatedAt                          string   `json:"updated_at" example:"2025-01-01T00:00:00Z"`
	TenantID                           uint     `json:"tenant_id,string" example:"100"`
	PartnerID                          string   `json:"partner_id" example:"partner_abc"`
	PaymentCode                        string   `json:"payment_code" example:"cus_abc123"`
	PaymentType                        string   `json:"payment_type" example:"stripe"`
	BillMonth                          string   `json:"bill_month" example:"2025-04"`
	StartDate                          string   `json:"start_date" example:"2025-04-01"`
	EndDate                            string   `json:"end_date" example:"2025-04-30"`
	BindedBillingConfigID              uint     `json:"binded_billing_config_id,string" example:"1"`
	IsEstimated                        bool     `json:"is_estimated" example:"false"`
	StripeAmount                       []string `json:"stripe_amount"`
	StripeTaxRate                      []string `json:"stripe_tax_rate"`
	StripeAmountIncludingTax           []string `json:"stripe_amount_including_tax"`
	StripeInvoiceNumber                []string `json:"stripe_invoice_number"`
	WireTransferAmount                 string   `json:"wire_transfer_amount" example:"100.00"`
	MarketplaceAmount                  string   `json:"marketplace_amount" example:"50.00"`
	PrepaymentCredits                  string   `json:"prepayment_credits" example:"20.00"`
	TotalAmount                        string   `json:"total_amount" example:"170.00"`
	InvoiceAmount                      string   `json:"invoice_amount" example:"150.00"`
	StripeInvoice                      []string `json:"stripe_invoice"`
	StripeInvoicePaid                  []string `json:"stripe_invoice_paid"`
	StripeInvoiceFinalizedDate         []string `json:"stripe_invoice_finalized_date"`
	StripeInvoicePaidDate              []string `json:"stripe_invoice_paid_date"`
	RawServerlessAmount                string   `json:"raw_serverless_amount"`
	RawDedicatedAmount                 string   `json:"raw_dedicated_amount"`
	RawStarterAmount                   string   `json:"raw_starter_amount"`
	RawEssentialAmount                 string   `json:"raw_essential_amount"`
	RawSupportAmount                   string   `json:"raw_support_amount"`
	RawPremiumAmount                   string   `json:"raw_premium_amount"`
	RawLakeAmount                      string   `json:"raw_lake_amount"`
	RawBYOCAmount                      string   `json:"raw_byoc_amount"`
	RawServerlessProgramCreditsAmount  string   `json:"raw_serverless_program_credits_amount"`
	RawDedicatedProgramCreditsAmount   string   `json:"raw_dedicated_program_credits_amount"`
	RawStarterProgramCreditsAmount     string   `json:"raw_starter_program_credits_amount"`
	RawEssentialProgramCreditsAmount   string   `json:"raw_essential_program_credits_amount"`
	RawSupportProgramCreditsAmount     string   `json:"raw_support_program_credits_amount"`
	RawPremiumProgramCreditsAmount     string   `json:"raw_premium_program_credits_amount"`
	RawLakeProgramCreditsAmount        string   `json:"raw_lake_program_credits_amount"`
	RawBYOCProgramCreditsAmount        string   `json:"raw_byoc_program_credits_amount"`
	RawServerlessRedeemCreditsAmount   string   `json:"raw_serverless_redeem_credits_amount"`
	RawDedicatedRedeemCreditsAmount    string   `json:"raw_dedicated_redeem_credits_amount"`
	RawStarterRedeemCreditsAmount      string   `json:"raw_starter_redeem_credits_amount"`
	RawEssentialRedeemCreditsAmount    string   `json:"raw_essential_redeem_credits_amount"`
	RawSupportRedeemCreditsAmount      string   `json:"raw_support_redeem_credits_amount"`
	RawPremiumRedeemCreditsAmount      string   `json:"raw_premium_redeem_credits_amount"`
	RawLakeRedeemCreditsAmount         string   `json:"raw_lake_redeem_credits_amount"`
	RawBYOCRedeemCreditsAmount         string   `json:"raw_byoc_redeem_credits_amount"`
	RawServerlessCustomerSuccessAmount string   `json:"raw_serverless_customer_success_amount"`
	RawDedicatedCustomerSuccessAmount  string   `json:"raw_dedicated_customer_success_amount"`
	RawStarterCustomerSuccessAmount    string   `json:"raw_starter_customer_success_amount"`
	RawEssentialCustomerSuccessAmount  string   `json:"raw_essential_customer_success_amount"`
	RawSupportCustomerSuccessAmount    string   `json:"raw_support_customer_success_amount"`
	RawPremiumCustomerSuccessAmount    string   `json:"raw_premium_customer_success_amount"`
	RawLakeCustomerSuccessAmount       string   `json:"raw_lake_customer_success_amount"`
	RawBYOCCustomerSuccessAmount       string   `json:"raw_byoc_customer_success_amount"`
	ServerlessAmount                   string   `json:"serverless_amount"`
	DedicatedAmount                    string   `json:"dedicated_amount"`
	StarterAmount                      string   `json:"starter_amount"`
	EssentialAmount                    string   `json:"essential_amount"`
	SupportAmount                      string   `json:"support_amount"`
	PremiumAmount                      string   `json:"premium_amount"`
	LakeAmount                         string   `json:"lake_amount"`
	BYOCAmount                         string   `json:"byoc_amount"`
	ChannelLossAmount                  string   `json:"channel_loss_amount"`
	ServerlessAllocatedLoss            string   `json:"serverless_allocated_loss"`
	DedicatedAllocatedLoss             string   `json:"dedicated_allocated_loss"`
	StarterAllocatedLoss               string   `json:"starter_allocated_loss"`
	EssentialAllocatedLoss             string   `json:"essential_allocated_loss"`
	SupportAllocatedLoss               string   `json:"support_allocated_loss"`
	PremiumAllocatedLoss               string   `json:"premium_allocated_loss"`
	LakeAllocatedLoss                  string   `json:"lake_allocated_loss"`
	BYOCAllocatedLoss                  string   `json:"byoc_allocated_loss"`
	CPPODiscountableProductAmount      string   `json:"cppo_discountable_product_amount"`
	CPPONonDiscountableProductAmount   string   `json:"cppo_non_discountable_product_amount"`
	DedicatedAccrualAmount             string   `json:"dedicated_accrual_amount"`
	SupportAccrualAmount               string   `json:"support_accrual_amount"`
}

// ARTableListResponse is the paginated response for listing AR table records.
type ARTableListResponse struct {
	Records      []ARTableRecordResponse `json:"records"`
	Page         int                     `json:"page"`
	PageSize     int                     `json:"page_size"`
	TotalResults int64                   `json:"total_results"`
}
