<?php

namespace App\Models\Concerns;

use Illuminate\Database\Eloquent\Builder;

/**
 * ソート用トレイト
 * - 画面の sort/sort_type 入力に合わせて安全に orderBy を適用
 */
trait HasSortable
{
    /**
     * 安全なソート適用
     *
     * @param Builder $query
     * @param string|null $column
     * @param string|null $direction
     * @param array<string> $allowList 許可カラム（省略時は無制限だが推奨しない）
     */
    public function scopeApplySort(Builder $query, ?string $column, ?string $direction, array $allowList = []): Builder
    {
        if (empty($column)) {
            return $query;
        }

        $dir = strtolower($direction ?? 'asc');
        if (!in_array($dir, ['asc', 'desc'], true)) {
            $dir = 'asc';
        }

        if (!empty($allowList) && !in_array($column, $allowList, true)) {
            return $query; // 許可されていないカラムは無視
        }

        return $query->orderBy($column, $dir);
    }
}




