<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

/**
 * 管轄駐輪場モデル - jurisdiction_parkingテーブル
 * 
 * オペレータが管轄する駐輪場の情報を管理
 */
class JurisdictionParking extends Model
{
    /**
     * テーブル名
     *
     * @var string
     */
    protected $table = 'jurisdiction_parking';

    /**
     * プライマリキー
     *
     * @var string
     */
    protected $primaryKey = 'jurisdiction_parking_id';

    /**
     * タイムスタンプ使用
     *
     * @var bool
     */
    public $timestamps = true;

    const CREATED_AT = 'created_at';
    const UPDATED_AT = 'updated_at';

    /**
     * 一括代入可能な属性
     *
     * @var array
     */
    protected $fillable = [
        'jurisdiction_parking_name',
        'ope_id',
        'park_id',
        'operator_id'
    ];

    /**
     * キャストする属性
     *
     * @var array
     */
    protected $casts = [
        'jurisdiction_parking_id' => 'integer',
        'ope_id' => 'integer',
        'park_id' => 'integer',
        'operator_id' => 'integer',
        'created_at' => 'datetime',
        'updated_at' => 'datetime'
    ];

    /**
     * オペレータとの関連
     * 
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function ope()
    {
        return $this->belongsTo(Ope::class, 'ope_id', 'ope_id');
    }

    /**
     * 駐輪場との関連
     * 
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function park()
    {
        return $this->belongsTo(Park::class, 'park_id', 'park_id');
    }

    /**
     * 指定駐輪場を管轄するオペレータIDリストを取得
     * 
     * @param int $parkId 駐輪場ID
     * @return array オペレータIDの配列
     */
    public static function getOperatorIdsByPark(int $parkId): array
    {
        return self::where('park_id', $parkId)
                   ->pluck('ope_id')
                   ->toArray();
    }
}

