package models

import (
	"gorm.io/gorm"
	"time"
)

type Category struct {
	ID        string `gorm:"size:36;not null;uniqueIndex;primary_key"`
	ParentID  string `gorm:"size:36;"`
	Section   Section
	SectionID string    `gorm:"size:36;index"`
	Products  []Product `gorm:"many2many:product_categories;"`
	Name      string    `gorm:"size:100;"`
	Image     string
	CreatedAt time.Time
	UpdatedAt time.Time
}

func (p *Category) GetCategory(db *gorm.DB, sectionID string) (*[]Category, error) {

	var categories []Category

	err := db.Debug().Model(&Category{}).Order("created_at desc").Where("section_id = ?", sectionID).Find(&categories).Error
	if err != nil {
		return nil, err
	}
	return &categories, nil
}

func (p *Category) GetCategoryByID(db *gorm.DB, categoryID string) (*Category, error) {
	var result Category

	err := db.Debug().Preload("Section").Model(&Category{}).Where("id = ?", categoryID).Find(&result).Error
	if err != nil {
		return nil, err
	}
	return &result, nil
}

func (p *Category) CreateCategory(db *gorm.DB, param *Category) (*Category, error) {
	category := &Category{
		ID:        param.ID,
		Name:      param.Name,
		SectionID: param.SectionID,
		CreatedAt: time.Time{},
		UpdatedAt: time.Time{},
	}

	err := db.Debug().Create(&category).Error
	if err != nil {
		return nil, err
	}
	return category, nil
}
