package model

import (
	"time"

	"gorm.io/datatypes"
)

type RentalOrder struct {
	ID                     uint64         `gorm:"primaryKey" json:"id"`
	OrderNo                string         `gorm:"size:64;not null;uniqueIndex" json:"order_no"`
	ListingID              uint64         `gorm:"not null;index" json:"listing_id"`
	AccountID              uint64         `gorm:"not null;index" json:"account_id"`
	OwnerID                uint64         `gorm:"not null;index" json:"owner_id"`
	RenterID               uint64         `gorm:"not null;index" json:"renter_id"`
	RentedAt               *time.Time     `json:"rented_at"`
	EstimatedDurationHours int            `gorm:"not null;default:24" json:"estimated_duration_hours"`
	RentAmount             float64        `gorm:"type:decimal(12,2);not null;default:0" json:"rent_amount"`
	OwnerRentAmount        float64        `gorm:"type:decimal(12,2);not null;default:0" json:"owner_rent_amount"`
	DepositAmount          float64        `gorm:"type:decimal(12,2);not null;default:0" json:"deposit_amount"`
	PlatformFee            float64        `gorm:"type:decimal(12,2);not null;default:0" json:"platform_fee"`
	AccountSnapshot        datatypes.JSON `json:"account_snapshot"`
	Status                 string         `gorm:"size:32;not null;default:'pending_payment'" json:"status"`
	HandoffStatus          string         `gorm:"size:32;not null;default:'none'" json:"handoff_status"`
	SettlementStatus       string         `gorm:"size:32;not null;default:'unsettled'" json:"settlement_status"`
	RefundStatus           string         `gorm:"size:32;not null;default:'none';index" json:"refund_status"`
	RefundAmountCent       int64          `gorm:"not null;default:0" json:"refund_amount_cent"`
	RefundedAt             *time.Time     `json:"refunded_at"`
	OwnerSettledAt         *time.Time     `json:"owner_settled_at"`
	SettledAt              *time.Time     `json:"settled_at"`
	CreatedAt              time.Time      `json:"created_at"`
	UpdatedAt              time.Time      `json:"updated_at"`
}

func (RentalOrder) TableName() string {
	return "rental_orders"
}
