// internal/models/category.go
package models

import (
	"time"

	"gorm.io/gorm"
)

// Category represents an item category
type Category struct {
	ID          uint           `gorm:"primaryKey" json:"id"`
	Name        string         `gorm:"type:varchar(100);not null" json:"name"`
	Slug        string         `gorm:"type:varchar(100);uniqueIndex;not null" json:"slug"`
	Description string         `gorm:"type:text" json:"description"`
	CreatedAt   time.Time      `json:"created_at"`
	UpdatedAt   time.Time      `json:"updated_at"`
	DeletedAt   gorm.DeletedAt `gorm:"index" json:"-"`

	// Relationships
	Items     []Item     `gorm:"foreignKey:CategoryID" json:"items,omitempty"`
	LostItems []LostItem `gorm:"foreignKey:CategoryID" json:"lost_items,omitempty"`
}

// TableName specifies the table name for Category model
func (Category) TableName() string {
	return "categories"
}

// CategoryResponse represents category data for API responses
type CategoryResponse struct {
	ID          uint      `json:"id"`
	Name        string    `json:"name"`
	Slug        string    `json:"slug"`
	Description string    `json:"description"`
	ItemCount   int64     `json:"item_count,omitempty"`
	CreatedAt   time.Time `json:"created_at"`
}

// ToResponse converts Category to CategoryResponse
func (c *Category) ToResponse() CategoryResponse {
	return CategoryResponse{
		ID:          c.ID,
		Name:        c.Name,
		Slug:        c.Slug,
		Description: c.Description,
		CreatedAt:   c.CreatedAt,
	}
}