<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Textbook extends Model
{
    protected $table = 'textbooks';

    protected $fillable = [
        'id',
        'series_id',
        'stage',
        'schooling_system',
        'grade',
        'semester',
        'naming_scheme',
        'track',
        'module_type',
        'volume_no',
        'legacy_code',
        'curriculum_standard_year',
        'curriculum_revision_year',
        'approval_authority',
        'approval_year',
        'edition_label',
        'official_title',
        'aliases',
        'isbn',
        'cover_path',
        'status',
        'sort_order',
        'meta',
        'series',
        'created_at',
        'updated_at',
    ];

    protected $casts = [
        'aliases' => 'array',
        'meta' => 'array',
        'grade' => 'integer',
        'semester' => 'integer',
        'volume_no' => 'integer',
        'curriculum_standard_year' => 'integer',
        'curriculum_revision_year' => 'integer',
        'approval_year' => 'integer',
        'sort_order' => 'integer',
    ];

    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        // 从 API 数据初始化时设置属性
        foreach ($attributes as $key => $value) {
            $this->setAttribute($key, $value);
        }
    }

    public function series()
    {
        return $this->belongsTo(TextbookSeries::class, 'series_id', 'id');
    }

    public function catalogs()
    {
        return $this->hasMany(TextbookCatalog::class);
    }


    public function getSeriesNameAttribute(): string
    {
        $series = $this->series()->first();
        if ($series) {
            return $series->name ?? '未归类系列';
        }

        $seriesId = $this->series_id;
        if (!$seriesId) {
            return '未归类系列';
        }

        static $seriesMap = null;
        if ($seriesMap === null) {
            $seriesMap = TextbookSeries::query()
                ->pluck('name', 'id')
                ->toArray();
        }

        return $seriesMap[$seriesId] ?? '未归类系列';
    }
}
