package entity

import (
	"time"
)

type OrderItem struct {
	ProductId int64  `json:"product_id" validate:"required,numeric,gt=0"`
	Quantity  int    `json:"quantity" validate:"required,numeric,gt=0"`
	Note      string `json:"note" validate:"required,numeric,gt=0"`
}

type StoreOrder struct {
	StoreId int64       `json:"store_id" validate:"required,gt=0"`
	Note    string      `json:"note"`
	Items   []OrderItem `json:"items" validate:"required,gte=1"`
}

type CreateOrderReq struct {
	ShippingAddressId int64        `json:"shipping_address_id" validate:"required,gt=0"`
	StoreOrders       []StoreOrder `json:"store_orders" validate:"required,gt=0"`
}

type CreateOrderRes struct {
	StoreId              int64  `json:"store_id"`
	Success              bool   `json:"success"`
	Error                string `json:"error"`
	OrderId              int64  `json:"order_id"`
	OrderCode            string `json:"order_code"`
	IsQuoteAfterOrdering bool   `json:"is_quote_after_ordering"`
	TotalPrice           int    `json:"total_price"`
	Status               int    `json:"status"`
}

type CreateOrderResponse struct {
	Response
	Data []CreateOrderRes `json:"data"`
}

type BuyerOrderList struct {
	Id                    int64     `json:"id"`
	Code                  string    `json:"code"`
	Price                 int       `json:"price"`
	TotalItems            int       `json:"total_items"`
	TotalDelivered        int       `json:"total_delivered"`
	StoreId               int64     `json:"store_id"`
	StoreName             string    `json:"store_name"`
	StorePhone            string    `json:"store_phone"`
	CreatedTimestamp      int64     `json:"created_at" gorm:"-"`
	IsCancelable          bool      `json:"is_cancelable"`
	IsQuoteAfterOrdering  bool      `json:"is_quote_after_ordering"`
	Status                int       `json:"status"`
	GroupStatus           int       `json:"group_status"`
	PaymentStatus         int       `json:"payment_status"`
	SellerChangeOrderItem bool      `json:"seller_change_order_item"`
	SellerChangeNote      string    `json:"seller_change_note"`
	CreatedAt             time.Time `json:"-"`
}

type BuyerOrderDetail struct {
	Id                    int64            `json:"id"`
	Code                  string           `json:"code"`
	Price                 int              `json:"price"`
	TotalItems            int              `json:"total_items"`
	TotalDelivered        int              `json:"total_delivered"`
	ReceiverName          string           `json:"receiver_name"`
	ReceiverPhone         string           `json:"receiver_phone"`
	ApartmentHouseNumber  string           `json:"apartment_house_number"`
	StoreId               int64            `json:"store_id"`
	StoreName             string           `json:"store_name"`
	StorePhone            string           `json:"store_phone"`
	Note                  string           `json:"note"`
	CanceledReason        string           `json:"canceled_reason"`
	IsCancelable          bool             `json:"is_cancelable"`
	IsQuoteAfterOrdering  bool             `json:"is_quote_after_ordering"`
	CreatedTimestamp      int64            `json:"created_at" gorm:"-"`
	Status                int              `json:"status"`
	GroupStatus           int              `json:"group_status"`
	PaymentStatus         int              `json:"payment_status"`
	PaymentProof          string           `json:"payment_proof"`
	SellerChangeOrderItem bool             `json:"seller_change_order_item"`
	SellerChangeNote      string           `json:"seller_change_note"`
	PaymentInfo           []StorePayment   `json:"payment_info" gorm:"-"`
	Items                 []BuyerOrderItem `json:"items" gorm:"-"`
	CreatedAt             time.Time        `json:"-"`
	Payment               string           `json:"-"`
}

type BuyerOrderItem struct {
	ProductId            int64   `json:"product_id"`
	Name                 string  `json:"name"`
	Quantity             float64 `json:"quantity"`
	QuoteQuantity        float64 `json:"quote_quantity"`
	Price                int     `json:"price"`
	SubtotalPrice        int     `json:"subtotal_price"`
	Status               int     `json:"status"`
	Thumbnail            string  `json:"thumbnail"`
	DeliveryType         int     `json:"delivery_type"`
	DeliveryCommitTime   int     `json:"delivery_commit_time"`
	IsQuoteAfterOrdering bool    `json:"is_quote_after_ordering"`
	Note                 string  `json:"note"`
}

type GetBuyerOrderResponse struct {
	Response
	Data BuyerOrderDetail `json:"data"`
}

type GetBuyerOrdersResponse struct {
	Response
	Data []BuyerOrderList `json:"data"`
}

type ProvePaymentRequest struct {
	ImageUrl string `json:"image_url" validate:"required"`
}
