package models

import (
	"time"
)

type MaterialBinding struct {
	ID         int64     `json:"id" gorm:"primaryKey;autoIncrement"`
	MaterialID int64     `json:"material_id" gorm:"not null;index:idx_bindings_material_id"`
	GroupID    string    `json:"group_id" gorm:"size:255;not null;index:idx_bindings_group_id"`
	CreatedAt  time.Time `json:"created_at" gorm:"autoCreateTime"`

	// 关联的材质（用于预加载）
	Material *Material `json:"material,omitempty" gorm:"foreignKey:MaterialID;constraint:OnDelete:CASCADE"`
}

func (MaterialBinding) TableName() string {
	return "material_bindings"
}

// 绑定请求 - 一个材质绑定到多个group_id
type BindingRequest struct {
	GroupIDs []string `json:"group_ids" binding:"required,min=1,max=10000"`
}

// 解绑请求
type UnbindRequest struct {
	GroupIDs []string `json:"group_ids" binding:"required,min=1,max=10000"`
}

// 批量查询group_id关联材质的请求
type GroupMaterialsRequest struct {
	GroupIDs []string `json:"group_ids" binding:"required,min=1,max=10000"`
}

// 批量查询结果 - 包含材质详情
type GroupMaterialResult struct {
	GroupID  string    `json:"group_id"`
	Material *Material `json:"material"`
}

// GetGroups 分页查询参数
type GroupListQuery struct {
	Page     int `form:"page"`
	PageSize int `form:"page_size"`
}

// GetGroups 分页响应
type GroupListResponse struct {
	Items    []string `json:"items"`
	Total    int64    `json:"total"`
	Page     int      `json:"page"`
	PageSize int      `json:"page_size"`
}
