package models

import (
	"time"

	"gorm.io/gorm"
)

type Product struct {
	ID            uint           `gorm:"primaryKey" json:"id"`
	Name          string         `gorm:"size:255;not null" json:"name"`
	Description   string         `json:"description"`
	Price         float64        `gorm:"type:decimal(10,2);not null" json:"price"`
	MinPurchase   int            `gorm:"default:1" json:"min_purchase"`
	MaxPurchase   *int           `json:"max_purchase"`
	MinWeight     *float64       `json:"min_weight"`
	MaxWeight     *float64       `json:"max_weight"`
	MinAmount     *float64       `json:"min_amount"`
	MaxAmount     *float64       `json:"max_amount"`
	RequireCredit bool           `gorm:"default:false" json:"require_credit"`
	CreditCost    int            `gorm:"default:0" json:"credit_cost"`
	CreditReward  int            `gorm:"default:0" json:"credit_reward"`
	Images        string         `gorm:"type:text" json:"images"`
	IsActive      bool           `gorm:"default:true" json:"is_active"`
	BrandID       *uint          `json:"brand_id"`
	Brand         *Brand         `json:"brand,omitempty"`
	CreatedAt     time.Time      `json:"created_at"`
	UpdatedAt     time.Time      `json:"updated_at"`
	DeletedAt     gorm.DeletedAt `gorm:"index" json:"-"`
	Categories    []Category     `gorm:"many2many:product_categories;" json:"categories,omitempty"`
	CustomFields  []ProductCustomField `json:"custom_fields,omitempty"`
}

func (Product) TableName() string {
	return "products"
}

type ProductCustomField struct {
	ID        uint      `gorm:"primaryKey" json:"id"`
	ProductID uint      `gorm:"index;not null" json:"product_id"`
	FieldName string    `gorm:"size:100;not null" json:"field_name"`
	FieldValue string   `json:"field_value"`
	CreatedAt time.Time `json:"created_at"`
}

func (ProductCustomField) TableName() string {
	return "product_custom_fields"
}
