<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class OpePermission extends Model
{
    // テーブル名
    protected $table = 'ope_permission';

    // 主キー
    protected $primaryKey = 'id';

    // created_at / updated_at を使用
    public $timestamps = true;

    // 一括代入許可カラム
    protected $fillable = [
        'municipality_id', // 自治体ID（外部キー）
        'feature_id',      // 機能ID（外部キー）
        'permission_id',   // 操作権限ID（外部キー）
    ];

    /**
     * 機能単位で権限を置換（自治体単位）
     * ※ municipality_id + feature_id の組み合わせを置換する
     */
    public static function replaceByFeature(
        int $municipalityId,
        int $featureId,
        array $permissionIds
    ): void {
        // ※既存削除
        self::query()
            ->where('municipality_id', $municipalityId)
            ->where('feature_id', $featureId)
            ->delete();

        // ※新規追加
        $permissionIds = array_values(array_unique(array_map('intval', $permissionIds)));
        foreach ($permissionIds as $pid) {
            self::create([
                'municipality_id' => $municipalityId,
                'feature_id' => $featureId,
                'permission_id' => $pid,
            ]);
        }
    }

    /**
     * 付与済み権限ID一覧を取得（自治体単位）
     */
    public static function getPermissionIds(
        int $municipalityId,
        int $featureId
    ): array {
        return self::query()
            ->where('municipality_id', $municipalityId)
            ->where('feature_id', $featureId)
            ->pluck('permission_id')
            ->map(fn ($v) => (int)$v)
            ->toArray();
    }
}
