<?php

namespace App\Models\Rd;

use App\Traits\BelongsToTenant;
use Illuminate\Database\Eloquent\Model;

class AiQuotationModule extends Model
{
    use BelongsToTenant;

    protected $table = 'ai_quotation_modules';

    protected $fillable = [
        'tenant_id',
        'module_code',
        'module_name',
        'category',
        'description',
        'keywords',
        'dev_cost',
        'monthly_fee',
        'is_active',
        'sort_order',
        'options',
    ];

    protected $casts = [
        'keywords' => 'array',
        'options' => 'array',
        'is_active' => 'boolean',
        'dev_cost' => 'decimal:0',
        'monthly_fee' => 'decimal:0',
    ];

    public const CATEGORY_BASIC = 'basic';

    public const CATEGORY_INDIVIDUAL = 'individual';

    public const CATEGORY_ADDON = 'addon';

    public static function getCategories(): array
    {
        return [
            self::CATEGORY_BASIC => '기본 패키지',
            self::CATEGORY_INDIVIDUAL => '개별 모듈',
            self::CATEGORY_ADDON => '부가 옵션',
        ];
    }

    public function scopeActive($query)
    {
        return $query->where('is_active', true);
    }

    /**
     * AI 프롬프트에 주입할 활성 모듈 목록 조회
     */
    public static function getActiveModulesForPrompt(): array
    {
        return self::active()
            ->orderBy('sort_order')
            ->get()
            ->map(fn ($m) => [
                'module_code' => $m->module_code,
                'module_name' => $m->module_name,
                'category' => $m->category,
                'description' => $m->description,
                'keywords' => $m->keywords,
                'dev_cost' => (int) $m->dev_cost,
                'monthly_fee' => (int) $m->monthly_fee,
            ])
            ->toArray();
    }

    public function getOption(string $key, $default = null)
    {
        return data_get($this->options, $key, $default);
    }

    public function setOption(string $key, $value): void
    {
        $options = $this->options ?? [];
        data_set($options, $key, $value);
        $this->options = $options;
        $this->save();
    }
}
