<?php

namespace App\Http\Controllers\Backend2;

use App\Components\Functions;
use App\Events\LogAction;
use App\Http\Controllers\Api\v1\BaseController;
use App\Http\Controllers\Backend\AdminController;
use App\Models\Contract;
use App\Models\ContractFee;
use App\Models\District;
use App\Models\ElectricWater;
use App\Models\Hostel;
use App\Models\HostelFee;
use App\Models\Lead;
use App\Models\MoneyDetail;
use App\Models\MoneyInfo;
use App\Models\Notification;
use App\Models\Province;
use App\Models\RenterRoom;
use App\Models\Room;
use App\Models\Ward;
use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Yajra\Datatables\Datatables;

class EwController extends AdminController
{
    //
    public function index(RenterRoom $request)
    {
        return view('admin2.ew.index');
    }

    public function generateSampleEw(Request $request)
    {
        $month = $request->input('month', Carbon::now()->format('m/Y'));
        $date = $request->input('date', Carbon::now()->format('d/m/Y'));
        return \Excel::create('Nhap-dien-nuoc', function ($excel) use ($month, $date) {

            $excel->sheet('dien-nuoc', function ($sheet) use ($month, $date) {
                $sheet->setAllBorders('medium');
                $sheet->setAutoSize(true);

                $sheet->setStyle(array(
                    'font' => array(
                        'name' => 'Times New Roman',
                        'size' => 11,
                    ),
                    'borders' => [
                        'allborders' => [
                            'style' => 'medium'
                        ]
                    ]
                ));
                $ownerId = auth('backend')->user()->id;
                if (auth('backend')->user()->type == User::STAFF) {
                    $ownerId = auth('backend')->user()->staff_owner_id;
                }
                $hostels = Hostel::query()
                    ->where('owner_id', $ownerId)
                    ->get();

                $monthCarbon = Carbon::createFromFormat('d/m/Y', '01/' . $month);
                $dateCarbon = Carbon::createFromFormat('d/m/Y', $date);
                $sheet->loadView('admin.sample.sample_ew', compact('hostels', 'monthCarbon', 'dateCarbon'));


            });
        })->download('xlsx');

    }

    public function exportExcel()
    {
        $hostelArrs = Hostel::where('owner_id', auth('backend')->user()->id)->pluck('id')->toArray();

        $items = ElectricWater::whereIn('hostel_id', $hostelArrs)->get();
        $responseArr = [];

        foreach ($items as $item) {
            $itemArr = [];
            $itemArr['Nhà trọ'] = $item->hostel_name;
            $itemArr['Phòng trọ'] = $item->room_name;
            $itemArr['Hợp đồng'] = $item->contract_code;
            $itemArr['Tháng'] = empty($item->date_action) ? null : $item->date_action->format('m/Y');
            $itemArr['Ngày chốt'] = empty($item->date_execution) ? $item->created_at->format('d/m/Y') : $item->date_execution->format('d/m/Y');
            $itemArr['Số điện đầu'] = $item->start_electric;
            $itemArr['Số điện cuối'] = $item->end_electric;
            $itemArr['Chênh lệch điện'] = $item->delta_electric;
            $itemArr['Số nước đầu'] = $item->start_water;
            $itemArr['Số nước cuối'] = $item->end_water;
            $itemArr['Chênh lệch nước'] = $item->delta_water;
            $responseArr[] = $itemArr;
        }

        $name = 'Dien-nuoc';
        \Excel::create($name . '-' . time(), function ($excel) use ($responseArr, $name) {
            $excel->sheet($name, function ($sheet) use ($responseArr) {
                $sheet->fromArray($responseArr);
            });
        })->download('xls');
    }

    public function importExcel(Request $request)
    {
        $file = $request->file('file');
        if (!\File::exists(public_path('files'))) {
            \File::makeDirectory(public_path('files'), '0777', true);
        }

        $filename = time() . '_' . mt_rand(1111, 9999) . '_' . str_slug($request->file('file')->getClientOriginalName());
        $filename = $filename . '.' . $file->extension();
        $request->file('file')->move(public_path('files'), $filename);

        $filePath = public_path('files/' . $filename);
        $items = \Excel::selectSheetsByIndex(0)->load($filePath, function ($reader) {
            $reader->noHeading();
        })->skip(1)->get();
        $ownerId = auth('backend')->user()->id;
        if (auth('backend')->user()->type == User::STAFF) {
            $ownerId = auth('backend')->user()->staff_owner_id;
        }

        $hostelsArrs = Hostel::query()
            ->where('owner_id', $ownerId)
            ->pluck('id')
            ->toArray();

        $roomArrs = Room::query()
            ->whereIn('hostel_id', $hostelsArrs)
            ->pluck('id')
            ->toArray();

        $message = '';



        foreach ($items as $item) {
            $hostelName = trim($item[0]);
            $roomName = trim($item[1]);
            $name = trim($item[2]);
            $month = trim($item[3]);
            $dateAction = trim($item[4]);
            $startElectric = trim($item[5]);
            $endElectric = trim($item[6]);
            $startWater = trim($item[7]);
            $endWater = trim($item[8]);
            $phone = trim($item[9]);

//            dd(trim($item[6]));

            if (empty($endWater)) {
                $endWater = 0;
            }
            if (empty($startWater)) {
                $startWater = 0;
            }
            if (empty($endElectric)) {
                $endElectric = 0;
            }
            if (empty($startElectric)) {
                $startElectric = 0;
            }
            $deltaElectric = $endElectric - $startElectric;
            $deltaWater = $endWater - $startWater;
            //dd($item);
            $hostel = Hostel::query()
                ->where('name', $hostelName)
                ->where('owner_id', $ownerId)
                ->first();

            $room = Room::query()
                ->where('name', $roomName)
                ->whereIn('id', $roomArrs)
                ->when(!empty($hostel), function ($q) use ($hostel) {
                    $q->where('hostel_id', $hostel->id);
                })
                ->first();

            $user = User::query()->where('phone', $phone)
                ->where('type', '<>', User::RENTER)
                ->first();

            if (!$room) {
                $message = "ABC";
//                dd($item);
                continue;
            }

            $contract = Contract::query()->where('room_id', $room->id)
                ->where('name', $name)
                ->where('status', '<>', Contract::LIQUIDATED)
                ->first();

            if (!$contract) {
                dd($item);
                continue;
            }

            try {
                $monthCarbon = Carbon::createFromFormat('d/m/Y', '01/' . trim($month));
                $dateActionCarbon = Carbon::createFromFormat('d/m/Y', trim($dateAction));
            } catch (\Exception $exception) {
                continue;

            }

            $check = ElectricWater::query()
                ->where('room_id', $room->id)
                ->where('contract_id', $contract->id)
                ->whereBetween('date_action', [
                    $monthCarbon->copy()->startOfMonth()->toDateTimeString(),
                    $monthCarbon->copy()->endOfMonth()->toDateTimeString()
                ])
                ->first();

            if ($check) {
                $check->update([
                    'room_id' => $room->id,
                    'hostel_id' => $room->hostel->id,
                    'start_electric' => $startElectric,
                    'end_electric' => $endElectric,
                    'start_water' => $startWater,
                    'end_water' => $endWater,
                    'delta_electric' => $deltaElectric,
                    'delta_water' => $deltaWater,
                    'date_action' => $monthCarbon->copy()->toDateTimeString(),
                    'date_execution' => $dateActionCarbon->copy()->toDateTimeString(),
                    'user_id' => optional($user)->id,
                    'contract_id' => optional($contract)->id
                ]);
            } else {

                ElectricWater::create([
                    'room_id' => $room->id,
                    'hostel_id' => $room->hostel->id,
                    'start_electric' => $startElectric,
                    'end_electric' => $endElectric,
                    'start_water' => $startWater,
                    'end_water' => $endWater,
                    'delta_electric' => $deltaElectric,
                    'delta_water' => $deltaWater,
                    'date_action' => $monthCarbon->copy()->toDateTimeString(),
                    'date_execution' => $dateActionCarbon->copy()->toDateTimeString(),
                    'user_id' => optional($user)->id,
                    'contract_id' => optional($contract)->id
                ]);
            }

        }

        return response([
            'status' => 1,
            'message' => 'Thành công '
        ]);
    }

    public function getDataByAttribute(Request $request)
    {
        $hostelArrs = Hostel::query()->where('owner_id', auth('backend')->user()->id)->pluck('id')->toArray();
        $isStat = $request->input('is_stat');
        $startDate = $request->input('start_date');
        $endDate = $request->input('end_date');
        $hostelId = $request->input('hostel_id');
        $roomId = $request->input('room_id');


        $items = ElectricWater::query()
            ->has('room')
            ->with('room')
            ->with('contract')
            ->with('hostel');

        if (auth('backend')->user()->type == User::STAFF) {
            $hostelArrs = Functions::getHostelArrStaff();
        }

       // $moneyInfos = MoneyInfo::whereIn('hostel_id', $hostelArrs)->pluck('id')->toArray();

        $ews = MoneyDetail::query();
        $ews->whereIn('hostel_id', $hostelArrs)
            ->whereHas('moneyInfo', function($q) use ($hostelArrs) {
                $q->whereIn('hostel_id', $hostelArrs);
            });
        $items = $items->whereIn('hostel_id', $hostelArrs);

//        if (auth('backend')->user()->type == User::STAFF) {
//            $items = $items->where('user_id', auth('backend')->user()->id);
//        }
        if (!empty($startDate)) {
            $startDate = Carbon::createFromFormat('d/m/Y', '01/' . $startDate);
            $items = $items->where('date_action', '>=', $startDate->copy()->startOfMonth()->toDateTimeString());
            $ews = $ews->whereHas('moneyInfo', function ($q) use ($startDate) {
                $q->where('date_action', '>=', $startDate->copy()->startOfMonth()->toDateString());
            });
        }

        if (!empty($endDate)) {
            $endDate = Carbon::createFromFormat('d/m/Y', '01/' . $endDate);
            $items = $items->where('date_action', '<=', $endDate->copy()->endOfMonth()->toDateTimeString());
            $ews = $ews->whereHas('moneyInfo', function ($q) use ($startDate) {
                $q->where('date_action', '<=', $startDate->copy()->startOfMonth()->toDateString());
            });
        }

        if (!empty($hostelId)) {
            $items = $items->where('hostel_id', $hostelId);
            $ews->where('hostel_id', $hostelId);
        }

        if (!empty($roomId) && !empty($hostelId)) {
            $items = $items->where('room_id', $roomId);
            $ews = $ews->where('room_id', $roomId);
        }
        $ewsElectric = clone $ews;
        $ewsWater = clone $ews;
        $ews = $ews->where(function ($q) {
            $q->orwhere('is_electric', 1);
            $q->orwhere('is_water', 1);
        })->get();


        //dd($ews);

//        $ewsElectric = $ewsElectric->where('is_electric', 1)
//            ->get();
//        foreach ($ewsElectric as $ewE)
//        {
//            $qty = json_decode($ewE->qty, true);
//            if($ewE->amount != (($qty['end'] - $qty['start']) * 3000))
//            {
//                dump($ewE->id);
//            }
//        }
        $ewsElectric = $ewsElectric->where('is_electric', 1)->sum('amount');



        $ewsWater = $ewsWater->where('is_water', 1)->sum('amount');

        if ($isStat == 1) {
            $sumElectricItems = clone $items;
            $sumWaterItems = clone $items;
            $sumElectric = $sumElectricItems->sum('delta_electric');
            $sumWater = $sumWaterItems->sum('delta_water');

            $ewsSum = clone $ews;
            $sumEWs = $ewsSum->sum('amount');

            return response([
                'status' => 1,
                'data' => view('admin2.ew.stat', compact('sumElectric', 'sumEWs', 'ewsElectric', 'ewsWater', 'sumWater'))->render()
            ]);
        }

        return Datatables::of($items)
            ->filterColumn('hostel_id', function ($query, $keyword) {
                $query->whereHas('hostel', function ($q) use ($keyword) {
                    $q->where('hostels.name', 'LIKE', '%' . $keyword . '%');
                });
            })
            ->filterColumn('room_id', function ($query, $keyword) {
                $query->whereHas('room', function ($q) use ($keyword) {
                    $q->where('rooms.name', 'LIKE', '%' . $keyword . '%');
                });
            })
            ->filterColumn('contract_id', function ($query, $keyword) {
                $query->whereHas('contract', function ($q) use ($keyword) {
                    $q->where('contracts.name', 'LIKE', '%' . $keyword . '%');
                });
            })
            ->editColumn('date_action', function ($item) {
                if (!empty($item->date_action)) {
                    return $item->date_action->format('m/Y');
                }
            })
            ->editColumn('hostel_id', function ($item) {
                if (!empty($item->hostel)) {
                    return $item->hostel->name;
                }
            })
            ->editColumn('contract_id', function ($item) {
                if (!empty($item->contract)) {
                    return $item->contract->name;
                }
            })
            ->editColumn('room_id', function ($item) {
                if (!empty($item->room)) {
                    return $item->room->name;
                }
            })
            ->editColumn('delta_electric', function ($item) {
                return '<span style="color: red; font-weight: bold">' . $item->delta_electric . '</span>';
            })
            ->editColumn('delta_water', function ($item) {
                return '<span style="color: red; font-weight: bold">' . $item->delta_water . '</span>';
            })
            ->addColumn('image', function ($item) {
                $retVal = '';
                if ($item->start_electric_image) {
                    $retVal .= '<a href="/files/' . $item->start_electric_image . '" data-toggle="lightbox" data-gallery="' . $item->id . '">Ảnh chỉ số điện đầu</a><br>';
                }
                if ($item->end_electric_image) {
                    $retVal .= '<a href="/files/' . $item->end_electric_image . '" data-toggle="lightbox" data-gallery="' . $item->id . '">Ảnh chỉ số điện cuối</a><br>';
                }

                if ($item->start_water_image) {
                    $retVal .= '<a href="/files/' . $item->start_water_image . '" data-toggle="lightbox" data-gallery="' . $item->id . '" >Ảnh chỉ số nước đầu</a><br>';
                }
                if ($item->end_water_image) {
                    $retVal .= '<a href="/files/' . $item->end_water_image . '" data-toggle="lightbox" data-gallery="' . $item->id . '" >Ảnh chỉ số nước cuối</a><br>';
                }

                return $retVal;
            })
            ->editColumn('date_execution', function ($item) {
                if (!empty($item->date_execution)) {
                    return $item->date_execution->format('d/m/Y');
                }

                return $item->created_at->format('d/m/Y');
            })
            ->editColumn('action', function ($item) {
                $retVal = '';
                if (auth('backend')->user()->cannot('delete-ew')) {
                    return $retVal;
                }
                $retVal .= '<a data-id="' . $item->id . '" class="btn btn-sm btn-outline btn-editable dark black btn-delete-ew"><i class="fa fa-trash"></i> Xóa</a>';
                return $retVal;
            })
            ->addIndexColumn()
            ->make(true);

    }


    public function getPreviousEw(Request $request)
    {
        $date = $request->input('date');
        if (empty($date)) {
            return response([
                'status' => 0,
                'message' => 'Dữ liệu không hợp lệ'
            ]);
        }
        $roomId = $request->input('room_id');
        $hostelId = $request->input('hostel_id');
        $contractId = $request->input('contract_id');

        $date = '01/' . $date;

        $pDate = Carbon::createFromFormat('d/m/Y', $date);
        $startElectric = 0;
        $startWater = 0;

        $item = ElectricWater::query()->where('room_id', $roomId)
            ->where('hostel_id', $hostelId)->whereBetween('date_action', [
                $pDate->copy()->subMonth()->startOfMonth(),
                $pDate->copy()->subMonth()->endOfMonth()
            ])->first();


        if ($item) {
            $startElectric = $item->end_electric;
            $startWater = $item->end_water;
        } else {
            $contract = Contract::find($contractId);
            if ($contract) {
                $hostelFees = HostelFee::query()->where('hostel_id', $hostelId)->get();
                foreach ($hostelFees as $hostelFee) {
                    $checkContract = ContractFee::query()->where('fee_id', $hostelFee->id)
                        ->where('contract_id', $contract->id)
                        ->first();

                    if ($checkContract) {
                        if ($hostelFee->type == HostelFee::ELECTRIC
                            || $hostelFee->type == HostelFee::ELECTRIC_BY_CLOCK
                        ) {
                            $startElectric = $checkContract->qty;
                        }

                        if ($hostelFee->type == HostelFee::WATER
                            || $hostelFee->type == HostelFee::WATER_BY_CLOCK
                        ) {
                            $startWater = $checkContract->qty;
                        }

                    }
                }
            }
        }

        return response([
            'status' => 1,
            'data' => [
                'start_electric' => $startElectric,
                'start_water' => $startWater
            ]
        ]);
    }

    public function store2(Request $request)
    {
        if (auth('backend')->user()->cannot('add-ew')) {
            return response([
                'status' => 2,
                'message' => 'Bạn chưa được phân quyền thực hiện'
            ]);
        }

        $data = $request->all();

        $hostelId = $data['hostel_id'];
        $roomId = $data['room_id'];
        $dateAction = $data['date_action'];
        $dateExecution = $data['date_execution'];

        $infoRoom = Room::find($roomId);

        if (!$infoRoom) {
            return response([
                'status' => 0,
                'message' => 'Phòng không hợp lệ'
            ]);
        }

        if (empty($hostelId) || empty($roomId)) {
            return response([
                'status' => 0,
                'message' => 'Không được bỏ trống nhà trọ / phòng trọ'
            ]);
        }

        if ($request->file('start_electric_image') && $request->file('start_electric_image')->isValid()) {
            $image = Functions::uploadImage($request->file('start_electric_image'));
            $data['start_electric_image'] = $image;
        }

        if ($request->file('end_electric_image') && $request->file('end_electric_image')->isValid()) {
            $image = Functions::uploadImage($request->file('end_electric_image'));
            $data['end_electric_image'] = $image;
        }

        if ($request->file('start_water_image') && $request->file('start_water_image')->isValid()) {
            $image = Functions::uploadImage($request->file('start_water_image'));
            $data['start_water_image'] = $image;
        }

        if ($request->file('end_water_image') && $request->file('end_water_image')->isValid()) {
            $image = Functions::uploadImage($request->file('end_water_image'));
            $data['end_water_image'] = $image;
        }

        if (empty($data['date_action'])) {
            $data['date_action'] = Carbon::now()->toDateTimeString();
            $startDateAction = Carbon::now()->startOfMonth()->toDateTimeString();
            $endDateAction = Carbon::now()->endOfMonth()->toDateTimeString();
        } else {
            $startDateAction = Carbon::createFromFormat('d/m/Y', '01/'.$data['date_action'])->startOfMonth()->toDateTimeString();
            $endDateAction = Carbon::createFromFormat('d/m/Y', '01/'.$data['date_action'])->endOfMonth()->toDateTimeString();
            $data['date_action'] = Carbon::createFromFormat('d/m/Y', '01/'.$data['date_action'])->toDateTimeString();
        }

        if (!empty($dateExecution)) {
            $data['date_execution'] = Carbon::createFromFormat('d/m/Y', $data['date_execution'])->toDateTimeString();
        }

        $startElectric = $data['start_electric'];
        $startWater = $data['start_water'];

        if (empty($data['contract_id'])) {
            return response([
                'status' => 0,
                'message' => 'Không được bỏ trống hợp đồng'
            ]);
        }

        if ($data['end_electric'] < $startElectric) {
            return response([
                'status' => 0,
                'message' => 'Số điện cuối không được nhỏ hơn số đầu'
            ]);
        }
        if ($data['end_water'] < $startWater) {
            return response([
                'status' => 0,
                'message' => 'Số nước cuối không được nhỏ hơn số đầu'
            ]);
        }

        $data['start_electric'] = $startElectric;
        $data['start_water'] = $startWater;
        $data['delta_electric'] = $data['end_electric'] - $startElectric;
        $data['delta_water'] = $data['end_water'] - $startWater;

        $check = ElectricWater::query()->where('room_id', $roomId)
            ->where('hostel_id', $hostelId)
            ->whereBetween('date_action', [$startDateAction, $endDateAction]);

        if (!empty($data['contract_id'])) {
            $check = $check->where('contract_id', $data['contract_id']);
        }

        $check = $check->first();

        if ($check) {
            $check->delete();
        }

        $item = ElectricWater::create($data);

        $content = 'Chốt điện nước tháng ' . $dateAction . ', số điện: ' . $data['end_electric'] . ', số nước: ' . $data['end_water'];

        $payload = [
            'id' => $item->id,
            'type' => 'EW'
        ];

        $renterRooms = RenterRoom::query()->where('room_id', $roomId)->get();

        foreach ($renterRooms as $renterRoom) {
            Notification::create([
                'hostel_id' => $hostelId,
                'room_id' => $roomId,
                'title' => 'Thông báo từ itro.vn',
                'to_user' => $renterRoom->user_id,
                'content' => $content,
                'user_id' => auth('backend')->user()->id,
                'payload' => json_encode($payload)
            ]);
        }

        $user = Functions::getCurrentUser();
        $desc = '{' . optional($user)->name . '} chốt điện nước tháng {' . $item->date_action->format('m/Y') . '} cho khách {' . optional($item->contract)->name . '}  phòng {' . optional($item->room)->name . '} nhà {' . optional($item->hostel)->name . '}';

        event(new LogAction([
            'type' => 'create-ew',
            'user_id' => optional($user)->id,
            'object_id' => $item->id,
            'hostel_id' => $item->hostel_id,
            'room_id' => $item->room_id,
            'properties' => $item->toArray(),
            'desc' => $desc
        ]));


        return response([
            'status' => 1,
            'message' => 'Thành công'
        ]);
    }

    public function store(Request $request)
    {
        if (auth('backend')->user()->cannot('add-ew')) {
            return response([
                'status' => 2,
                'message' => 'Bạn chưa được phân quyền thực hiện'
            ]);
        }

        $data = $request->all();

        $hostelId = $data['hostel_id'];
        $roomId = $data['room_id'];
        $dateAction = $data['date_action'];

        $infoRoom = Room::find($roomId);

        if (!$infoRoom) {
            return response([
                'status' => 0,
                'message' => 'Phòng không hợp lệ'
            ]);
        }

        if (empty($hostelId) || empty($roomId)) {
            return response([
                'status' => 0,
                'message' => 'Không được bỏ trống nhà trọ / phòng trọ'
            ]);
        }
        if (empty($data['date_action'])) {
            $data['date_action'] = Carbon::now()->toDateTimeString();
            $startDateAction = Carbon::now()->startOfMonth()->toDateTimeString();
            $endDateAction = Carbon::now()->endOfMonth()->toDateTimeString();
        } else {
            $startDateAction = Carbon::createFromFormat('d/m/Y', '01/'.$data['date_action'])->startOfMonth()->toDateTimeString();
            $endDateAction = Carbon::createFromFormat('d/m/Y', '01/'.$data['date_action'])->endOfMonth()->toDateTimeString();
            $data['date_action'] = Carbon::createFromFormat('d/m/Y', '01/'.$data['date_action'])->toDateTimeString();
        }


        $check = ElectricWater::where('room_id', $roomId)->where('date_action', '>=', $startDateAction)->where('date_action', '<=', $endDateAction)->first();

        if ($check) {
            $startElectric = $check->start_electric;
            $startWater = $check->start_water;
        } else {

            $lastInfo = ElectricWater::where('hostel_id', $hostelId)->where('room_id', $roomId)->latest()->first();


            if (!$lastInfo) {

                $startElectric = $infoRoom->start_electric;
                $startWater = $infoRoom->start_water;
            } else {

                $startElectric = $lastInfo->end_electric;
                $startWater = $lastInfo->end_water;
            }
        }


        if ($data['end_electric'] < $startElectric) {
            return response([
                'status' => 0,
                'message' => 'Số điện cuối không được nhỏ hơn số đầu'
            ]);
        }
        if ($data['end_water'] < $startWater) {
            return response([
                'status' => 0,
                'message' => 'Số nước cuối không được nhỏ hơn số đầu'
            ]);
        }

        $data['start_electric'] = $startElectric;
        $data['start_water'] = $startWater;
        $data['delta_electric'] = $data['end_electric'] - $startElectric;
        $data['delta_water'] = $data['end_water'] - $startWater;


        if ($check) {
            $check->update($data);
            $check->save();

            //Cập nhật sang bên phiếu thu chi
            $voucher = MoneyInfo::where('date_action', '>=', $startDateAction)->where('date_action', '<=', $endDateAction)->first();

            if ($voucher) {
                $moneyDetailElectric = MoneyDetail::where('money_info_id', $voucher->id)
                    ->where('is_electric', true)
                    ->first();
                if ($moneyDetailElectric) {
                    $moneyDetailElectric->qty = json_encode([
                        'start' => $startElectric,
                        'end' => $data['end_electric'],
                        'item_id' => $check->id
                    ]);

                    $moneyDetailElectric->amount = ($data['end_electric'] - $startElectric) * $moneyDetailElectric->value;

                    $moneyDetailElectric->save();
                }

                $moneyDetailWater = MoneyDetail::where('money_info_id', $voucher->id)
                    ->where('is_water', true)
                    ->first();

                if ($moneyDetailWater) {
                    $moneyDetailWater->qty = json_encode([
                        'start' => $startWater,
                        'end' => $data['end_water'],
                        'item_id' => $check->id
                    ]);

                    $moneyDetailWater->amount = ($data['end_water'] - $startWater) * $moneyDetailWater->value;

                    $moneyDetailWater->save();
                }

                $amount = MoneyDetail::where('money_info_id', $voucher->id)->sum('amount');

                $voucher->amount = $amount;
                $voucher->remain = $amount - $voucher->pay;
                $voucher->save();
            }

        } else {
            ElectricWater::create($data);
        }


        if ($infoRoom) {
            $infoRoom->current_electric = $data['end_electric'];
            $infoRoom->current_water = $data['end_water'];
            $infoRoom->save();
        }

        $renters = RenterRoom::where('room_id', $data['room_id'])->get();

        foreach ($renters as $renter) {
            Notification::create([
                'image' => auth('backend')->user()->image,
                'to_user' => $renter->user_id,
                'hostel_id' => $data['hostel_id'],
                'room_id' => $data['room_id'],
                'title' => 'Thông báo từ itro.vn',
                'user_id' => $this->user->id,
                'content' => 'Tình hình sử dụng điện, nước tháng ' . $dateAction . '. Phòng ' . $infoRoom->name . ' dùng ' . $data['delta_electric'] . ' kwh điện và ' . $data['delta_water'] . ' m3 nước. Chỉ số cuối là ' . $data['end_electric'] . ' kwh và ' . $data['end_water'] . ' m3',
            ]);

        }

        if ($request->ajax()) {
            return response([
                'status' => 1,
                'message' => 'Thành công'
            ]);
        }
    }

    public function destroy(Request $request)
    {
        $id = $request->input('id');
        $item = ElectricWater::find($id);

        if (!$item) {
            return response([
                'status' => 0,
                'message' => 'Dữ liệu không hợp lệ'
            ]);
        }

        if ($item) {
            $user = Functions::getCurrentUser();
            $desc = '{' . optional($user)->name . '} xóa điện nước tháng {' . $item->date_action->format('m/Y') . '} cho khách {' . optional($item->contract)->name . '}  phòng {' . optional($item->room)->name . '} nhà {' . optional($item->hostel)->name . '}';

            event(new LogAction([
                'type' => 'delete-ew',
                'user_id' => optional($user)->id,
                'object_id' => $item->id,
                'hostel_id' => $item->hostel_id,
                'room_id' => $item->room_id,
                'properties' => $item->toArray(),
                'desc' => $desc
            ]));
            $item->delete();
        }

        return response([
            'status' => 1,
            'message' => 'Thành công'
        ]);
    }
}
