<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Barryvdh\DomPDF\Facade\Pdf;

class TagissueController extends Controller
{
    // タグ発送宛名PDF生成
    public function printUnissuedLabels(Request $request)
    {
        $ids = $request->input('ids', []);
        if (empty($ids) || !is_array($ids)) {
            return back()->with('error', '1件以上選択してください。');
        }
        // 利用者情報取得
        $users = DB::table('user')
            ->whereIn('user_id', $ids)
            ->select('user_name', 'user_regident_zip', 'user_regident_pre')
            ->get();

    // PDF生成（Laravel-dompdf使用例）
    $pdfHtml = view('admin.tag_issue.pdf_labels', ['users' => $users])->render();
    $pdf = Pdf::setOptions(['isRemoteEnabled' => true])->loadHTML($pdfHtml);
    return $pdf->download('tag_labels.pdf');
    }
    public function list(Request $request)
    {
        // 絞り込み条件
    $filterType = $request->input('filter_type'); // 'unissued', 'issued', 'all', 'unissued_toggle'
        $tagSerial = $request->input('tag_serial');
        $tagSerial64 = $request->input('tag_serial_64');

        // ソートパラメータ取得
        $sort = $request->input('sort');
        $sortType = $request->input('sort_type', 'asc');

        // userテーブルとoperator_queテーブルをJOIN
        $query = DB::table('user')
            ->leftJoin('operator_que', 'user.user_id', '=', 'operator_que.user_id')
            ->select(
                'user.user_seq',
                'user.user_id',
                'user.user_tag_serial',
                'user.user_tag_serial_64',
                'user.user_tag_issue',
                'user.user_name',
                'user.user_mobile',
                'user.user_homephone',
                'user.user_regident_zip',
                'user.user_regident_pre',
                'user.user_regident_city',
                'user.user_regident_add',
                'user.user_relate_zip',
                'user.user_relate_pre',
                'user.user_relate_city', 
                'user.user_relate_add',
                'operator_que.que_id',
                'operator_que.que_class',
                'operator_que.que_status'
            );

        // ソート項目に応じたorderBy
        switch ($sort) {
            case 'que_id':
                $query->orderBy('operator_que.que_id', $sortType);
                break;
            case 'user_tag_serial':
                $query->orderBy('user.user_tag_serial', $sortType);
                break;
            case 'user_tag_serial_64':
                $query->orderBy('user.user_tag_serial_64', $sortType);
                break;
            case 'user_tag_issue':
                $query->orderBy('user.user_tag_issue', $sortType);
                break;
            case 'user_name':
                $query->orderBy('user.user_name', $sortType);
                break;
            default:
                $query->orderByDesc('user.user_seq');
        }

        // 【種別フィルター】タグ未発送（通常）
        if ($filterType === 'unissued') {
            $query->where('operator_que.que_class', 3)
                  ->where('operator_que.que_status', 1);
        }
        // 【種別フィルター】タグ未発送トグル（que_class=3かつque_status≠3）
        if ($filterType === 'unissued_toggle') {
            $query->where('operator_que.que_class', 3)
                  ->where('operator_que.que_status', '<>', 3);
        }
        // 【種別フィルター】タグ発送済み（通常）
        if ($filterType === 'issued') {
            $query->where('operator_que.que_class', 3)
                  ->where('operator_que.que_status', 3);
        }
        // 【種別フィルター】タグ発送済みトグル（que_class=3 and que_status=3）
        if ($filterType === 'issued_toggle') {
            $query->where('operator_que.que_class', 3)
                  ->where('operator_que.que_status', 3);
        }
        // 【タグシリアル・タグシリアル64進フィルター】
        if (!empty($tagSerial)) {
            $query->where('user.user_tag_serial', 'like', "%$tagSerial%");
        }
        if (!empty($tagSerial64)) {
            $query->where('user.user_tag_serial_64', 'like', "%$tagSerial64%");
        }

        $users = $query->paginate(20);

        return view('admin.tag_issue.list', [
            'users' => $users,
            'filterType' => $filterType,
            'tagSerial' => $tagSerial,
            'tagSerial64' => $tagSerial64,
            'sort' => $sort,
            'sortType' => $sortType,
        ]);
    }

    // ステータス変更（タグ発送済み/未発送）
        public function updateStatus(Request $request)
        {
            $ids = $request->input('ids', []); // チェックされたuser_id配列
            $action = $request->input('action'); // 'to_issued' or 'to_unissued'

            $operatorId = auth()->id();
            $now = now();
            // 対象ユーザーのoperator_queを取得
            $ques = DB::table('operator_que')->whereIn('user_id', $ids)->get();
            if ($action === 'to_issued') {
                $alreadyIssued = $ques->where('que_status', 3)->pluck('user_id')->toArray();
                if (count($alreadyIssued) > 0) {
                    return back()->with('error', 'すでにタグ発送済みのユーザーが含まれています。');
                }
                // 確認ダイアログはJS側で
                DB::table('operator_que')->whereIn('user_id', $ids)
                    ->update(['que_status' => 3, 'updated_at' => $now, 'operator_id' => $operatorId]);
                return back()->with('success', 'ステータスをタグ発送済に変更しました。');
            }
            if ($action === 'to_unissued') {
                $alreadyUnissued = $ques->where('que_status', 1)->pluck('user_id')->toArray();
                if (count($alreadyUnissued) > 0) {
                    // 既にタグ未発送のユーザー名を取得
                    $names = DB::table('user')->whereIn('user_id', $alreadyUnissued)->pluck('user_name')->toArray();
                    return back()->with('error', 'すでにタグ未発送のユーザーが含まれています: ' . implode(', ', $names));
                }
                // すべてque_status=1以外なので更新
                DB::table('operator_que')->whereIn('user_id', $ids)
                    ->update(['que_status' => 1, 'updated_at' => $now, 'operator_id' => $operatorId]);
                return back()->with('success', 'ステータスをタグ未発送に変更しました。');
            }
            return back()->with('error', '不正な操作です。');
        }

        // Ajax: 選択user_idのque_statusを返す（タグ発送済み/未発送判定）
        public function checkStatus(Request $request)
        {
            $ids = $request->input('ids', []);
            $type = $request->input('type'); // 'issued' or 'unissued'
            $users = DB::table('user')
                ->leftJoin('operator_que', 'user.user_id', '=', 'operator_que.user_id')
                ->whereIn('user.user_id', $ids)
                ->select('user.user_name', 'operator_que.que_status')
                ->get();
            $alreadyIssued = [];
            $alreadyUnissued = [];
            foreach ($users as $u) {
                if ($type === 'issued' && $u->que_status == 3) {
                    $alreadyIssued[] = $u->user_name;
                }
                if ($type === 'unissued' && $u->que_status == 1) {
                    $alreadyUnissued[] = $u->user_name;
                }
            }
            return response()->json([
                'alreadyIssued' => $alreadyIssued,
                'alreadyUnissued' => $alreadyUnissued
            ]);
        }
}