<?php

namespace App\Http\Controllers;

use App\Models\CheckIn;
use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Requests\StoreCheckInRequest;
use App\Http\Requests\UpdateCheckInRequest;
use App\Models\Department;

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\IReader;
use PhpOffice\PhpSpreadsheet\Reader\Csv;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
use PhpOffice\PhpSpreadsheet\Reader\Xls;
use PhpOffice\PhpSpreadsheet\IOFactory;

class CheckInController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    public function index_by_activity(UpdateCheckInRequest $request)
    {
        return CheckIn::where('activity_id', $request->activityId)->get();
    }

    public function draw_user_when_check_in(StoreCheckInRequest $request)
    {
        return CheckIn::where('is_checked_in', 'true')->get()->random($request->number);
    }

    public function draw_user_by_region(StoreCheckInRequest $request)
    {
        return CheckIn::where('is_checked_in', 'true')
            ->whereTime('check_ins.updated_at', '<=', $request->deadline)
            ->whereIn('region', $request->region)
            ->get()
            ->random($request->number);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \App\Http\Requests\StoreCheckInRequest  $request
     * @return \Illuminate\Http\Response
     */
    public function store(StoreCheckInRequest $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\CheckIn  $checkIn
     * @return \Illuminate\Http\Response
     */
    public function show(Request $request, CheckIn $checkIn)
    {
        //


        $checkIn = $request->activity_id ?
            CheckIn::where('user_id', '=', $request->user_id)->where('activity_id', '=', $request->activity_id)->first()
            : CheckIn::where('user_id', '=', $request->user_id)->first();
        if (!$checkIn) {
            $response = [
                'user' => $checkIn,
            ];
            return response($response, 201);
        }

        $department = Department::where('department_id', '=', $checkIn->department_id)->first();
        $checkIn->department = $department->department_name ?? '暫無部門';
        $response = [
            'user' => $checkIn,
        ];
        return response($response, 201);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\CheckIn  $checkIn
     * @return \Illuminate\Http\Response
     */
    public function edit(CheckIn $checkIn)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \App\Http\Requests\UpdateCheckInRequest  $request
     * @param  \App\Models\CheckIn  $checkIn
     * @return \Illuminate\Http\Response
     */
    public function update(UpdateCheckInRequest $request, CheckIn $checkIn)
    {
        CheckIn::where('user_id', $request->user_id)->update(['is_checked_in' => true]);
        return 'success';
    }

    public function check_out(UpdateCheckInRequest $request, CheckIn $checkIn)
    {
        CheckIn::where('user_id', $request->user_id)->update(['is_checked_in' => false]);
        return 'success';
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\CheckIn  $checkIn
     * @return \Illuminate\Http\Response
     */
    public function destroy(CheckIn $checkIn)
    {
        //
    }

    public function export(Request $request)
    {
        $users = CheckIn::where('activity_id', '=', $request->activity_id)->get();
        $filename = "check_in_list_" . date('Y_m_d_H_i_s',time()) . ".csv";
        $handle = fopen($filename, 'w+');
        fputcsv($handle, array('user_id', 'is_checked_in', 'updated_at'));

        foreach ($users as $user) {
            fputcsv($handle, array($user->user_id, $user->is_checked_in, $user->updated_at));
        }

        fclose($handle);

        $headers = array(
            'Content-Type' => 'text/csv',
        );

        return response()->download($filename, $filename, $headers);
    }
}
