package models

import (
	"gorm.io/gorm"
)

// Minimal, temiz GORM modelleri

type ProductCategory struct {
	gorm.Model
	Title       string            `gorm:"type:varchar(254);not null" json:"title"`
	Slug        string            `gorm:"type:varchar(254);not null;uniqueIndex" json:"slug"`
	Description string            `json:"description,omitempty"`
	Keywords    string            `json:"keywords,omitempty"`
	ParentID    *uint             `json:"parent_id,omitempty"`
	Parent      *ProductCategory  `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;foreignKey:ParentID" json:"parent,omitempty"`
	Children    []ProductCategory `gorm:"foreignKey:ParentID" json:"children,omitempty"`
	Products    []Product         `gorm:"many2many:product_product_categories;" json:"products,omitempty"`
}

type ProductTag struct {
	gorm.Model
	Name     string    `gorm:"type:varchar(254);not null" json:"name"`
	Products []Product `gorm:"many2many:product_product_tags;" json:"products,omitempty"`
}

type Product struct {
	gorm.Model
	Title      string            `gorm:"type:varchar(254);not null" json:"title" form:"title"`
	Images     string            `gorm:"type:text;not null" json:"images" form:"images"`
	Price      float64           `gorm:"type:decimal(10,2);default:0.0" json:"price" form:"price"`
	Width      int               `gorm:"default:0" json:"width" form:"width"`
	Height     int               `gorm:"default:0" json:"height" form:"height"`
	Quality    int               `gorm:"default:0" json:"quality" form:"quality"`
	Format     string            `gorm:"type:varchar(10);default:avif" json:"format" form:"format"`
	Content    string            `gorm:"type:text" json:"content,omitempty" form:"content"`
	Slug       string            `gorm:"type:varchar(254);not null;uniqueIndex" json:"slug" form:"slug"`
	Categories []ProductCategory `gorm:"many2many:product_product_categories;" json:"categories,omitempty" form:"product_category"`
	Tags       []ProductTag      `gorm:"many2many:product_product_tags;" json:"tags,omitempty" form:"tags"`
}

type ProductCategoryView struct {
	gorm.Model
	CategoryID uint   `json:"category_id"`
	IPAddress  string `gorm:"type:varchar(45)" json:"ip_address,omitempty"`
}

type ProductComment struct {
	gorm.Model
	UserID    uint   `json:"user_id"`
	ProductID uint   `json:"product_id"`
	Body      string `gorm:"type:text" json:"body,omitempty"`
}
