<?php

namespace App\Http\Controllers;

use App\Staff2000Contract;
use Auth;
use App\Apply;
use App\Contract;
use App\Event;
use App\Facades\Csv;
use App\PersonalEvent;
use App\Staffu;
use Carbon\Carbon;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     */
    public function index()
    {
        $user = Auth::user();
        $now = Carbon::now();
        $endOfMonth = Carbon::now()->endOfMonth();
        $nextMonth = Carbon::now()->addMonthNoOverflow();
        $nextEndOfMonth = Carbon::now()->addMonthNoOverflow()->endOfMonth();
        $monthAfterNextMonth = Carbon::now()->addMonthNoOverflow(2);
        $monthAfterNextEndOfMonth = Carbon::now()->addMonthNoOverflow(2)->endOfMonth();

        // イベント
        $todayPublicEvents = Event::todayEvents()->get();
        $todayPersonalEvents = PersonalEvent::todayEvents()
            ->own($user->id)
            ->get();

        // 契約期間(staff2000)
        $todayStaff2000Contracts = Staff2000Contract::todayContracts()->get();
        $thisMonthStaff2000Contracts = Staff2000Contract::contractByMonth($now)->get();
        $nextMonthStaff2000Contracts = Staff2000Contract::contractByMonth($nextMonth)->get();
        $monthAfterNextMonthStaff2000Contracts = Staff2000Contract::contractByMonth($monthAfterNextMonth)->get();

        // 契約終了(staff2000)
        $thisMonthEndStaff2000Contracts = Staff2000Contract::expiringContracts($now)->get();
        $nextMonthEndStaff2000Contracts = Staff2000Contract::expiringContracts($nextMonth)->get();
        $monthAfterNextMonthEndStaff2000Contracts = Staff2000Contract::expiringContracts($monthAfterNextMonth)->get();

        // 新規スタッフ
        $newStaffus = Staffu::newStaffus()->get();
        $updatedStaffus = Staffu::updatedStaffus()->get();
        $newApplies = Apply::newApplies()->get();


        return view('home', compact(
            'user',
            'now',
            'endOfMonth',
            'nextMonth',
            'nextEndOfMonth',
            'monthAfterNextMonth',
            'monthAfterNextEndOfMonth',
            'todayPublicEvents',
            'todayPersonalEvents',
            'newStaffus',
            'updatedStaffus',
            'newApplies',
            'contract',
            'todayStaff2000Contracts',
            'thisMonthStaff2000Contracts',
            'nextMonthStaff2000Contracts',
            'monthAfterNextMonthStaff2000Contracts',
            'thisMonthEndStaff2000Contracts',
            'nextMonthEndStaff2000Contracts',
            'monthAfterNextMonthEndStaff2000Contracts'
        ));
    }

    public function exportStaff2000(Request $request)
    {
        $csv_list = Staff2000Contract::getExpiringCsvList($request->get('list_type'));
        $header = array_values(Staff2000Contract::EXPIRING_CSV_FILEDS);

        return Csv::download($csv_list, $header, date('YmdHis').'_staff2000_expiring_contract-export.csv');
    }
}