<?php

namespace App\Http\Controllers\Backend;

use App\Components\Functions;
use App\Models\Contract;
use App\Models\ElectricWater;
use App\Models\Hostel;
use App\Models\Room;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class BaseController extends Controller
{
    //
    public function getTimeRange(Request $request)
    {
        $timeRange = $request->input('time_range');

        $response = Functions::getDateTimeRange2($timeRange);

        return response($response);

    }

    public function getHostelByOwner(Request $request)
    {
        $id = $request->input('id');
        $items = Hostel::query()
            ->where('owner_id', $id)
            ->get();

        return view('frontend.hostels_select', compact('items'))->render();
    }

    public function getSubLocation(Request $request)
    {
        if ($request->isMethod('post')) {
            return '';
        }
        $id = $request->input('id');
        $type = $request->input('type');

        if ($type == 'province') {
            $type = 'districtid';
            $items = \DB::table('district')->where('provinceid', $id)->orderBy(\DB::raw('name COLLATE utf8_vietnamese_ci'))->get();
        } else if ($type == 'district') {
            $type = 'wardid';
            $items = \DB::table('ward')->where('districtid', $id)->orderBy(\DB::raw('name COLLATE utf8_vietnamese_ci'))->get();
        }

        return view('frontend.locations', compact('items', 'type'))->render();
    }

    public function getSubHostel(Request $request)
    {
        $id = $request->input('id');
        $type = $request->input('type');
        $items = Room::query()->where('hostel_id', $id)->orderBy('name', 'asc')->get()->sortBy(function ($item) {
            return $item->name;
        });

        if ($type == 'ew') {
            $month = $request->input('month');
            $roomEw = ElectricWater::query()
                ->where('hostel_id', $id)
                ->whereBetween('date_action', [
                    Carbon::createFromFormat('d/m/Y', '01/' . $month)->startOfMonth()->startOfDay(),
                    Carbon::createFromFormat('d/m/Y', '01/' . $month)->endOfMonth()->endOfDay(),
                ])
                ->pluck('room_id')
                ->unique()
                ->toArray();
            $items = Room::query()->where('hostel_id', $id)
                ->whereNotIn('id', $roomEw)
                ->orderBy('name', 'asc')
                ->get()
                ->sortBy(function ($item) {
                    return $item->name;
                });
        }

        return view('admin2.room.room_select', compact('items', 'type'))->render();
    }

    public function getContracts(Request $request)
    {
        $roomId = $request->input('room_id');
        $hostelId = $request->input('hostel_id');
        $contracts = Contract::query();
        if (!empty($hostelId)) {
            $contracts = $contracts->where('hostel_id', $hostelId);
        }

        if (!empty($roomId)) {
            $contracts = $contracts->where('room_id', $roomId);
        }

        $contracts = $contracts->where('status', '<>', Contract::LIQUIDATED)->orderBy('created_at', 'desc')->get();

        return view('admin2.room.contract_select', compact('contracts'))->render();
    }

    public function getLocationCoor(Request $request)
    {
        $id = $request->input('id');
        $type = $request->input('type');

        $lat = null;
        $lng = null;
        if ($type == 'province') {
            $item = \DB::table('province')->where('provinceid', $id)->first();
            $lat = $item->lat;
            $lng = $item->lng;
        } else if ($type == 'district') {
            $item = \DB::table('district')->where('districtid', $id)->first();
            $lat = $item->lat;
            $lng = $item->lng;
        } else if ($type == 'ward') {
            $item = \DB::table('ward')->where('wardid', $id)->first();
            $lat = $item->lat;
            $lng = $item->lng;
        }

        return response([
            'lat' => $lat,
            'lng' => $lng
        ]);
    }
}
