<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Psection;

class PsectionController extends Controller
{
    // 一覧画面
   public function list(Request $request)
    {
        $inputs = $request->all();
        // ソート可能なカラム
        $allowedSortColumns = ['psection_id', 'psection_subject'];

        // ソート情報の取得
        $sortColumn = $inputs['sort'] ?? 'psection_id';
        $sortType   = strtolower($inputs['sort_type'] ?? 'asc');

        $query = \App\Models\Psection::query();

        if (in_array($sortColumn, $allowedSortColumns, true)) {
            if (!in_array($sortType, ['asc', 'desc'], true)) {
                $sortType = 'asc';
            }
            $query->orderBy($sortColumn, $sortType);
        }

        // ページネーション（20件）
        $list = $query->paginate(20);

        return view('admin.psection.list', [
            'list'      => $list,
            'sort'      => $sortColumn,
            'sort_type' => $sortType,
        ]);
    }
    
    /**
     * 車種区分マスタ：新規登録（画面/処理）
     */
    public function add(Request $request)
    {
        if ($request->isMethod('get')) {
            // GET：新規画面を表示
            return view('admin.psection.add', [
                'isEdit' => false,               
                'record' => new Psection(),    
            ]);
        }

        // POST：バリデーション
        $validated = $request->validate([
            // 'psection_id' は自動採番
            'psection_subject' => 'required|string|max:255',
        ]);

        // 登録処理
        Psection::create($validated);

        // 完了メッセージ＋一覧へ戻る
        return redirect()->route('psections')->with('success', '登録しました。');
    }


    /**
     * 車種区分マスタ：編集（画面/処理）
     */
    public function edit(Request $request, $id)
    {
        // 主キーで検索（見つからない場合は404）
        $record = Psection::findOrFail($id);

        if ($request->isMethod('get')) {
            // 編集画面表示
            return view('admin.psection.edit', [
                'isEdit' => true,     // ← ★ Blade 側のフォームで新規／編集を判定するため
                'record' => $record,  // ← ★ _form.blade.php で使用する
            ]);
        }

        // POST時：バリデーション
        $validated = $request->validate([
            'psection_subject' => 'required|string|max:255',
        ]);

        // データ更新
        $record->update($validated);

        // 成功メッセージ & リダイレクト
        return redirect()->route('psections')->with('success', '更新しました。');
    }

    /**
     * 削除（単一／複数対応）
     */
    public function delete(Request $request)
    {
        $ids = [];

        // 単一削除（編集画面などからの削除ボタン）
        if ($request->filled('id')) {
            $ids[] = (int) $request->input('id');
        }

        // 一覧画面からの複数削除チェックボックス対応
        if (is_array($request->input('pk'))) {
            $ids = array_merge($ids, $request->input('pk'));
        }

        // 重複削除・無効値除去
        $ids = array_values(array_unique(array_map('intval', $ids)));

        // 削除対象がない場合
        if (empty($ids)) {
            return back()->with('error', '削除対象が選択されていません。');
        }

        // 削除実行
        Psection::whereIn('psection_id', $ids)->delete();

        // 完了メッセージ＋リダイレクト
        return redirect()->route('psections')->with('success', '削除しました。');
    }

}
