<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Usertype;

class PersonalController extends Controller
{
    /**
     * 本人確認手動処理 一覧画面
     */
    public function list(Request $request)
    {
        $query = User::query()
            // 本人確認手動処理：未チェック(1) または 手動NG(4) または 自動チェックNG(5)
            ->whereIn('user_idcard_chk_flag', [1, 4, 5])
            // 本人確認書類アップロード済み
            ->where(function($q) {
                $q->whereNotNull('photo_filename1')
                  ->orWhereNotNull('photo_filename2');
            })
            // usertypeテーブルとLEFT JOINで分類情報を取得
            ->leftJoin('usertype', 'user.user_categoryid', '=', 'usertype.user_categoryid')
            ->select('user.*', 
                    'usertype.usertype_subject1', 
                    'usertype.usertype_subject2', 
                    'usertype.usertype_subject3');

        if ($request->filled('user_id')) {
            $query->where('user.user_id', $request->input('user_id'));
        }

        // データベースの物理順序（主キー昇順）で表示
        $users = $query->paginate(20);
        return view('admin.personal.list', [
            'users' => $users,
            'request' => $request,
        ]);
    }

    /**
     * 本人確認手動処理 編集画面
     */
    public function edit(Request $request, $seq)
    {
        \Log::info('=== Personal Edit Method START ===', ['seq' => $seq, 'method' => $request->method()]);
        
        // 利用者情報取得（user_seqで検索）
        $user = User::where('user_seq', $seq)->firstOrFail();
        
        \Log::info('User found:', [
            'user_seq' => $user->user_seq,
            'user_id' => $user->user_id,
            'current_flag' => $user->user_idcard_chk_flag
        ]);

        // 利用者分類マスタ取得（ラジオボタン用）
        $usertypes = Usertype::orderBy('sort_order')->get();

        // POST時の処理
        if ($request->isMethod('post')) {
            \Log::info('=== FULL REQUEST DEBUG ===');
            \Log::info('All request data:', $request->all());
            
            \Log::info('=== Personal Edit POST Processing ===');
            
            // 各フィールドの更新
            $user->user_categoryid = $request->input('user_categoryid', $user->user_categoryid);
            $user->user_regident_zip = $request->input('user_regident_zip', $user->user_regident_zip);
            $user->user_regident_pre = $request->input('user_regident_pre', $user->user_regident_pre);
            $user->user_regident_city = $request->input('user_regident_city', $user->user_regident_city);
            $user->user_regident_add = $request->input('user_regident_add', $user->user_regident_add);
            $user->user_relate_zip = $request->input('user_relate_zip', $user->user_relate_zip);
            $user->user_relate_pre = $request->input('user_relate_pre', $user->user_relate_pre);
            $user->user_relate_city = $request->input('user_relate_city', $user->user_relate_city);
            $user->user_relate_add = $request->input('user_relate_add', $user->user_relate_add);
            $user->user_remarks = $request->input('user_remarks', $user->user_remarks);
            $user->user_idcard = $request->input('user_idcard', $user->user_idcard);

            // 本人確認チェック処理（バックアップ値を優先使用）
            $checkValue = $request->input('check') ?? $request->input('check_backup');
            
            \Log::info('Check value received:', [
                'check' => $request->input('check'),
                'check_backup' => $request->input('check_backup'),
                'final_value' => $checkValue,
                'type' => gettype($checkValue)
            ]);

            if ($checkValue === 'ok') {
                $user->user_idcard_chk_flag = 3;  // 手動チェックOK
                $user->ope_id = auth()->user()->ope_id ?? auth()->id();  // 現在ログイン中の操作者ID
                \Log::info('Setting user_idcard_chk_flag to 3 (手動チェックOK)');
                \Log::info('Setting ope_id to current user:', ['ope_id' => $user->ope_id]);
            } elseif ($checkValue === 'ng') {
                $user->user_idcard_chk_flag = 4;  // 手動チェックNG
                $user->ope_id = auth()->user()->ope_id ?? auth()->id();  // 現在ログイン中の操作者ID
                \Log::info('Setting user_idcard_chk_flag to 4 (手動チェックNG)');
                \Log::info('Setting ope_id to current user:', ['ope_id' => $user->ope_id]);
            } else {
                \Log::warning('No valid check value received', [
                    'checkValue' => $checkValue,
                    'all_input' => $request->all()
                ]);
            }

            \Log::info('Before save:', [
                'user_idcard_chk_flag' => $user->user_idcard_chk_flag,
                'ope_id' => $user->ope_id,
                'isDirty' => $user->isDirty(),
                'getDirty' => $user->getDirty()
            ]);

            try {
                $result = $user->save();
                \Log::info('User saved successfully', [
                    'result' => $result,
                    'user_idcard_chk_flag' => $user->user_idcard_chk_flag
                ]);

                // 保存結果の検証
                $user->refresh(); // モデルデータをリフレッシュ
                $savedUser = User::where('user_seq', $seq)->first();
                \Log::info('Verification after save', [
                    'model_refresh' => $user->user_idcard_chk_flag,
                    'user_idcard_chk_flag' => $savedUser->user_idcard_chk_flag
                ]);

                // データベース直接確認
                $dbUser = \DB::table('user')->where('user_seq', $seq)->first();
                \Log::info('DB direct check:', [
                    'user_idcard_chk_flag' => $dbUser->user_idcard_chk_flag ?? 'NOT_FOUND'
                ]);

            } catch (\Exception $e) {
                \Log::error('Save failed', [
                    'error' => $e->getMessage(),
                    'file' => $e->getFile(),
                    'line' => $e->getLine()
                ]);
                return back()->withErrors('保存に失敗しました: ' . $e->getMessage());
            }

            \Log::info('=== POST Processing END ===');

            // 成功メッセージ
            $message = 'データを更新しました。';
            if ($checkValue === 'ok') {
                $message = '本人確認チェックOKで更新しました。';
            } elseif ($checkValue === 'ng') {
                $message = '本人確認チェックNGで更新しました。';
            }

            return redirect()->route('personal')->with('success', $message);
        }

        \Log::info('=== Personal Edit Method END (GET) ===');
        
        return view('admin.personal.edit', [
            'user' => $user,
            'usertypes' => $usertypes,
        ]);
    }
}