<?php

namespace App\Domains\Catalog\Models;

use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;

#[Fillable([
    'catalog_item_id',
    'attribute_id',
    'allow_multi_select',
    'sort_order',
    'show_in_selector',
    'ticket_label',
])]
class ItemAttribute extends Model
{
    use HasFactory;

    protected $table = 'item_attributes';

    protected $attributes = [
        'show_in_selector' => true,
    ];

    protected function casts(): array
    {
        return [
            'catalog_item_id' => 'integer',
            'attribute_id' => 'integer',
            'allow_multi_select' => 'boolean',
            'sort_order' => 'integer',
            'show_in_selector' => 'boolean',
        ];
    }

    /** @return BelongsTo<CatalogItem, $this> */
    public function catalogItem(): BelongsTo
    {
        return $this->belongsTo(CatalogItem::class);
    }

    /** @return BelongsTo<Attribute, $this> */
    public function attribute(): BelongsTo
    {
        return $this->belongsTo(Attribute::class);
    }

    /** @return HasMany<VariantDefinition, $this> */
    public function variantDefinitions(): HasMany
    {
        return $this->hasMany(VariantDefinition::class);
    }
}
