<?php

namespace App\Http\Controllers\Backend2;

use App\Components\Functions;
use App\Events\LogAction;
use App\Http\Controllers\Backend\AdminController;
use App\Models\Account;
use App\Models\Contract;
use App\Models\Hostel;
use App\Models\Rating;
use App\Models\Renter;
use App\Models\RenterBike;
use App\Models\RenterRoom;
use App\Models\Residence;
use App\Models\ResidenceChange;
use App\Models\Room;
use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\File;
use Yajra\Datatables\Datatables;

class RenterController extends AdminController
{
    //
    public function getRenterByAttributeView()
    {
        return view('admin2.renter.index');
    }

    public function changePasswordView(Request $request)
    {
        $accountId = $request->input('account_id');

        return response([
            'status' => 1,
            'data' => view('admin.account.change_password', compact('accountId'))->render()
        ]);
    }

    public function getRenterByRoom(Request $request)
    {
        $roomId = $request->input('room_id');
        $renters = Renter::query()
            ->where('room_id', $roomId)
            ->where('status', Renter::LIVING)
            ->get();
        return response([
            'status' => 1,
            'data' => view('admin2.renter.select_renter', compact('renters'))->render()
        ]);
    }

    public function changePasswordAjax(Request $request)
    {
        $accountId = $request->input('account_id');
        $password = $request->input('password');
        $renter = Renter::find($accountId);
        if ($renter) {
            $account = User::find($renter->user_id);
            if ($account) {
                if (!empty($password)) {
                    $account->password = \Hash::make($password);
                    $account->save();
                }
            }
        }

        return response([
            'status' => 1
        ]);
    }


    public function edit($id)
    {

        $renter = Renter::query()
            ->where('user_id', $id)
            ->orderBy('id', 'desc')
            ->first();
        if (!$renter) {
            $renter = Renter::query()->where('id', $id)->first();
            if (!$renter) {
                return response([
                    'status' => 0,
                    'message' => 'Dữ liệu không hợp lệ'
                ]);
            }
        }


        $user = User::find($renter->user_id);

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

        $bikes = RenterBike::query()->where('renter_id', $renter->user_id)->get();
        $renterDt = RenterRoom::query()->where('user_id', $renter->user_id)->first();

        return response([
            'status' => 1,
            'data' => view('admin2.renter.edit', compact('renter', 'user', 'bikes', 'renterDt'))->render()
        ]);
    }

    public function update(Request $request)
    {
        $id = $request->input('id');
        $data = $request->all();
        $renter = Renter::find($id);
        if (!$renter) {
            return response([
                'status' => 0,
                'message' => 'Dữ liệu không hợp lệ'
            ]);
        }

        try {

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

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

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


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

            if (!empty($data['birthday'])) {
                try {
                    $data['birthday'] = Carbon::createFromFormat('d/m/Y', $data['birthday'])->toDateString();
                } catch (\Exception $exception) {

                }
            }

            if (!empty($data['id_number_date'])) {
                try {
                    $data['id_number_date'] = Carbon::createFromFormat('d/m/Y', $data['id_number_date'])->toDateString();
                } catch (\Exception $exception) {

                }
            }

            $roomId = $renter->room_id;
            $room = Room::find($roomId);
            \DB::beginTransaction();


            Contract::where('room_id', $roomId)->where('renter_id', $renter->user_id)->update([
                'name' => $data['name'],
                'id_number' => $data['id_number'],
                'phone' => $data['phone']
            ]);

            $renterRoom = RenterRoom::where('room_id', $roomId)->where('user_id', $renter->user_id)->first();
            if ($renterRoom) {
                $renterRoom->residence_status = $data['residence_status'];

                if ($data['residence_status'] == RenterRoom::RESIDENCE_LIMIT) {
                    if (!empty($data['date_end_residence'])) {
                        $data['date_end_residence'] = Carbon::createFromFormat('d/m/Y', $data['date_end_residence'])->toDateString();
                        $renterRoom->date_end_residence = $data['date_end_residence'];
                    }
                }

                $renterRoom->save();
            }

//            $data['date_joined'] = $data['date_join'];
//            unset($data['date_join']);

            $user = User::find($renter->user_id);
            if ($user) {
                $user->update($data);
            }
            $renter->update($data);

            $bikeNames = $request->input('bike_names');
            $bikeTypes = $request->input('bike_types');
            $bikeBks = $request->input('bike_bks');
            $bikeImg = $request->file('bike_image');
            if (is_array($bikeNames)) {
                foreach ($bikeNames as $key => $bikeName) {
                    $bikeBk = empty($bikeBks[$key]) ? 0 : $bikeBks[$key];
                    $bikeType = empty($bikeTypes[$key]) ? 0 : $bikeTypes[$key];
                    $bikeName = empty($bikeNames[$key]) ? 0 : $bikeNames[$key];
                    $bikeImage = empty($bikeImg[$key]) ? 0 : Functions::uploadImage($bikeImg[$key]);

                    RenterBike::create([
                        'name' => $bikeName,
                        'type' => $bikeType,
                        'bks' => $bikeBk,
                        'image' => $bikeImage,
                        'room_id' => $renter->room_id,
                        'renter_id' => $renter->user_id,
                    ]);
                }
            }
            \DB::commit();

            $user = Functions::getCurrentUser();
            $desc = '{' . $user->name . '} sửa thông tin khách {' . $request->input('name') . '} phòng {' . $room->name . '} nhà {' . $room->hostel->name . '}';
            event(new LogAction([
                'type' => 'update-renter',
                'user_id' => optional($user)->id,
                'object_id' => $renter->id,
                'hostel_id' => $room->hostel_id,
                'room_id' => $room->id,
                'properties' => $renter->toArray(),
                'desc' => $desc
            ]));


        } catch (\Exception $exception) {
            \DB::rollBack();
            //dd($exception->getTraceAsString());

            return response([
                'status' => 0,
                'message' => $exception->getLine() . '|' . $exception->getMessage()
            ]);
        }

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

    public function getContract(Request $request)
    {
        $contractId = $request->input('contract_id');
        $roomId = $request->input('room_id');

        $renters = RenterRoom::query()
            ->with('renter')
            ->where('room_id', $roomId)
            ->where('room_contract_id', $contractId)
            ->get();

        return response([
            'status' => 1,
            'data' => view('admin2.renter.select_contract_leave', compact('renters', 'contractId'))->render()
        ]);
    }

    public function changeContract(Request $request)
    {
        $contractId = $request->input('contract_id');
        $renterId = $request->input('renter_id');

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

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

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

        $contract->update([
            'name' => $renter->name,
            'phone' => $renter->phone,
            'email' => $renter->email,
            'id_number_front' => $renter->id_number_front,
            'id_number_back' => $renter->id_number_back,
            'renter_id' => optional($renter->user)->id,
        ]);

        RenterRoom::query()
            ->where('room_id', $contract->room_id)
            ->where('user_id', $renter->user_id)
            ->update([
                'contract_id' => $contract->id,
                'room_contract_id' => null
            ]);

        return response([
            'status' => 1
        ]);
    }

    public function getRenterByAttribute(Request $request)
    {
        $hostelId = $request->input('hostel_id');
        $isExport = $request->input('is_export');


        $ownerId = auth('backend')->user()->id;
        if (auth('backend')->user()->type == User::STAFF) {
            $ownerId = auth('backend')->user()->staff_owner_id;
        }

        

        if (auth('backend')->user()->type != User::ADMIN) {

            if (!empty($hostelId)) {
                $items = Renter::query()->where('renters.hostel_id', $hostelId);
            } else {

                $items = Renter::query()->whereHas('hostel', function ($q) use ($ownerId) {
                    $q->where('owner_id', $ownerId);
                });
            }
        } else {
            $items = Renter::query();
        }

        if (auth('backend')->user()->type == User::STAFF) {
            $hostelIds = Functions::getHostelArrStaff();
            $items = $items->whereIn('renters.hostel_id', $hostelIds);
        }


        $items = $items->select(\DB::raw('renters.*'))
            ->with('renterRoom')
            ->with('hostel')
            ->with('room')
            ->has('room')
            ->has('hostel')
            ->with('user')
            ->where('renters.status', Renter::LIVING)
            ->groupBy(['renters.phone', 'renters.status'])
            ->when(!empty(\request()->input('province_id')), function ($q) {
                $q->whereHas('user', function ($q) {
                    $q->where('province_id', \request()->input('province_id'));
                });

            })
            ->when(!empty(\request()->input('district_id')), function ($q) {
                $q->whereHas('user', function ($q) {
                    $q->where('district_id', \request()->input('district_id'));
                });
            })
            ->when(!empty(\request()->input('ward_id')), function ($q) {
                $q->whereHas('user', function ($q) {
                    $q->where('ward_id', \request()->input('ward_id'));
                });
            })->has( 'renterRoom' );;
        
        if ($isExport == 1) {
            $itemsExcel = clone $items;
            $itemsExcel = $itemsExcel
                ->join('hostels', 'hostels.id', '=', 'renters.hostel_id')
                ->join('rooms', 'rooms.id', '=', 'renters.room_id')
                ->orderBy('hostels.name', 'asc')
                ->orderBy('rooms.name', 'asc')
                ->get();
            $responseArr = [];
            $files = [];


            foreach ($itemsExcel as $itemE) {
                $user = $itemE->user;
                $message = 'Chưa khai báo';
                if ($itemE->residence_status == RenterRoom::RESIDENCE_LIMIT) {
                    $message = 'Có thời hạn';
                }
                if ($itemE->residence_status == RenterRoom::RESIDENCE_NOT_LIMIT) {
                    $message = 'Không thời hạn';
                }

                $itemArr['Tên'] = $itemE->name;
                $itemArr['SDT'] = $itemE->phone;
                $itemArr['Ngày sinh'] = !empty($itemE->birthday) ? $itemE->birthday->format('d/m/Y') : '';
                $itemArr['Quê quán'] = $itemE->address_text;
                $itemArr['CMT'] = !empty($user) ? $user->id_number : '';
                $itemArr['Ngày cấp'] = !empty($itemE->id_number_date) ? Carbon::createFromFormat('Y-m-d', $itemE->id_number_date)->format('d/m/Y') : '';
                $itemArr['Nơi cấp'] = $itemE->id_number_location;
                $itemArr['Nhà trọ'] = $itemE->hostel_name;
                $itemArr['Phòng trọ'] = $itemE->room_name;
                $itemArr['Ngày vào'] = !empty($itemE->date_joined) ? $itemE->date_joined->format('d/m/Y') : '';
                $itemArr['Tạm trú'] = $message;
                $itemArr['Thời hạn tạm trú'] = !empty($itemE->date_end_residence) ? $itemE->date_end_residence->format('d/m/Y') : '';
                $responseArr[] = $itemArr;
                
                // dd($itemE->renterRoom);


                // $file = [
                //     'id_number_front' => $itemE->id_number_front,
                //     'id_number_back' => $itemE->id_number_back,
                //     'image' => $itemE->image,
                //     'name' => $itemE->name
                // ];
                // $files[] = $file;
            }
            
            

            $name = 'Nguoi-o-tro';

            $sortedArr = collect($responseArr)
                ->sortBy('Nhà trọ')
                ->values()
                ->all();


            $zip = new \ZipArchive();
            $fileName = 'renter-export/danh-sach-nguoi-thue-tro-' . time() . '.zip';
            $name = $name . '-' . time();
            \Excel::create($name, function ($excel) use ($sortedArr, $name) {
                $excel->sheet($name, function ($sheet) use ($sortedArr) {
                    $sheet->fromArray($sortedArr);
                });
            })->store('xls', storage_path('excel/exports'));
            //   dd($files);
            if ($zip->open(public_path($fileName), \ZipArchive::CREATE) === TRUE) {
//                foreach ($files as $value) {
//                    if (!empty($value['id_number_front'])) {
//                        $nameFile = $value['name'] . '/cmt-mat-truoc-' . $value['name'] . '.' . File::extension($value['id_number_front']);
//                        $zip->addFile(public_path('files/' . $value['id_number_front']), $nameFile);
//                    }
//                    if (!empty($value['id_number_back'])) {
//                        $nameFile = $value['name'] . '/cmt-mat-sau-' . $value['name'] . '.' . File::extension($value['id_number_back']);
//                        $zip->addFile(public_path('files/' . $value['id_number_back']), $nameFile);
//                    }
//
//                    if (!empty($value['image'])) {
//                        $nameFile = $value['name'] . '/anh-dai-dien-' . $value['name'] . '.' . File::extension($value['image']);
//                        $zip->addFile(public_path('files/' . $value['image']), $nameFile);
//                    }
//                }
                $zip->addFile(storage_path('excel/exports/' . $name . '.xls'), 'danh-sach-nguoi-o-tro.xls');
                $zip->close();
            }

            return response()->download(public_path($fileName));


//            return \Excel::create($name . '-' . time(), function ($excel) use ($sortedArr, $name) {
//                $excel->sheet($name, function ($sheet) use ($sortedArr) {
//                    $sheet->fromArray($sortedArr);
//                });
//            })->download('xls');
        }

        $items = $items->when(!$request->has('order'), function ($q) {
            $q->orderBy('id', 'desc');
        });
        
        
        return Datatables::of($items)
            ->addIndexColumn()
            ->filterColumn('is_install_app', function ($query, $keyword) {
                
                if ($keyword == 1) {
                    $query->whereHas('user', function ($q) use ($keyword) {
                        $q->where(function ($q) {
                            $q->orWhereNotNull('ios_token');
                            $q->orWhereNotNull('android_token');
                        });
                    });
                }

            })
            ->filterColumn('status', function ($query, $keyword) {
                if ($keyword == Renter::LIVING) {
                    $query->has('renterRoom');
                } else if ($keyword == Renter::LEFT) {
                    $query->doesntHave('renterRoom');
                }
            })
            ->filterColumn('payment_status', function ($query, $keyword) {
                $query->whereHas('hostel.owner', function ($q) use ($keyword) {
                    $q->where('payment_status', $keyword);
                });

            })
            ->addColumn('action', function ($item) {


            })
            ->editColumn('status', function ($item) {
                if ($item->status == Renter::LIVING) {
                    return '<label class="label label-success">Đang ở</label>';
                }

                return '<label class="label label-danger">Đã chuyển đi</label>';
            })
            ->editColumn('hostel_id', function ($item) {
                return optional($item->hostel)->name;
            })
            ->editColumn('room_id', function ($item) {
                return optional($item->room)->name;
            })
            ->editColumn('birthday', function ($item) {
                //return $item->birthday;
                if (!empty($item->birthday)) {
                    return $item->birthday->format('d/m/Y');
                }
            })
            ->editColumn('name', function ($item) {
                //return $item->birthday;
                return '<div style="min-width: 120px">' . $item->name . '</div>';
            })
            ->addColumn('payment_status', function ($item) {
                //return $item->birthday;
                return optional(optional($item->hostel)->owner)->payment_status_text;
            })
            ->addColumn('cmts', function ($item) {
                $retVal = '';
                if (!empty($item->id_number_front)) {
                    $retVal .= '<a href="/files/' . $item->id_number_front . '" data-toggle="lightbox" data-gallery="' . $item->id . '">Ảnh mặt trước</a><br>';
                }

                if (!empty($item->id_number_back)) {
                    $retVal .= '<a href="/files/' . $item->id_number_back . '" data-toggle="lightbox" data-gallery="' . $item->id . '">Ảnh mặt sau</a><br>';
                }

                return $retVal;
            })
            ->editColumn('residence_status', function ($item) {
                if ($item->residence_status == RenterRoom::RESIDENCE_LIMIT) {
                    return '<label class="label label-success">Có thời hạn</label>';
                }
                if ($item->residence_status == RenterRoom::RESIDENCE_NOT_LIMIT) {
                    return '<label class="label label-warning">Không thời hạn</label>';
                }

                return '<label class="label label-danger">Chưa khai báo</label>';
            })
            ->editColumn('is_self_register', function ($item) {
                if ($item->is_self_register == true) {
                    return '<label class="label label-success">Tự đăng ký</label>';
                }

                return '<label class="label label-warning">Không tự đăng ký</label>';

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

            })
            ->editColumn('address', function ($item) {
                return $item->address_text;

            })
            ->addColumn('is_install_app', function ($item) {
                if ($item->user) {
                    $user = $item->user;
                    if (!empty($user->android_token) || !empty($user->ios_token)) {
                        return '<label class="label label-success">Đã cài app</label>';
                    }
                }

                return '<label class="label label-danger">Chưa cài app</label>';

            })
            ->editColumn('image', function ($item) {
                if (!empty($item->image)) {
                    return '<img class="img-circle" src="/files/' . $item->image . '" style="width: 80px; height: 80px" />';
                }

                return '<img class="img-circle" src="/frontend3/assets/img/avatar_thue@1x.png" style="width: 80px; height: 80px" />';

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

            })
            ->addColumn('action', function ($item) {

                $activeText = 'Hủy kích hoạt';

                if ($item->status == User::IN_ACTIVE) {
                    $activeText = 'Kích hoạt';
                }

                $stt = 0;
                if ($item->residence) {
                    if ($item->residence->summarize_family) {
                        if (is_array($item->residence->summarize_family)) {
                            $stt = count($item->residence->summarize_family);
                        } else {
                            $stt = $item->residence->summarize_family->count();
                        }
                    }
                }

                return
                    '<a href="#residence" data-stt="' . $stt . '"  data-renter="' . $item->id . '" data-toggle="modal" class="btn btn-sm btn-outline btn-editable btn-residence purple"><i class="fa fa-edit"></i> Hồ sơ tạm trú</a>' .
                    '<a href="#change-password" data-id="' . $item->id . '" data-toggle="modal" class="btn btn-sm yellow btn-outline btn-change-password"> Đổi mk</a>';

            })
            ->make(true);
    }

    public function storeRating(Request $request)
    {
        $data = $request->all();
        $contents = $request->input('content');
        $rates = $request->input('rate');
        $userBeRateds = $request->input('user_be_rated');
        foreach ($rates as $key => $rate) {
            $content = null;
            if (isset($contents[$key])) {
                $content = $contents[$key];
            }

            Rating::updateOrCreate([
                'user_be_rated' => $userBeRateds[$key],
                'hostel_id' => $data['hostel_id'],
            ], [
                'user_be_rated' => $userBeRateds[$key],
                'hostel_id' => $data['hostel_id'],
                'content' => $content,
                'rate' => $rate,
                'user_id' => auth('backend')->user()->id,
                'type' => User::RENTER
            ]);
        }

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

    }

    public function getRatingView(Request $request)
    {
        $contractId = $request->input('contract_id');
        $contract = Contract::find($contractId);
        $renterId = $request->input('renter_id');
        $roomId = $request->input('room_id');

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

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

            $hostel = $room->hostel;
            if (!$hostel) {
                return response([
                    'status' => 0,
                    'message' => 'Dữ liệu không hợp lệ'
                ]);
            }
        } else {
            $previousRenter = RenterRoom::withTrashed()
                ->where('user_id', $renterId)
                ->where('room_id', $roomId)->first();
            if (!$previousRenter) {
                return response([
                    'status' => 0,
                    'message' => 'Dữ liệu không hợp lệ'
                ]);
            }

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

            $hostel = $room->hostel;
            if (!$hostel) {
                return response([
                    'status' => 0,
                    'message' => 'Dữ liệu không hợp lệ'
                ]);
            }
        }
        $roomId = $room->id;
        if (!empty($contractId)) {
            if ($hostel->type_rent == Hostel::TYPE_RENT_EVERY) {
                $renterRooms = RenterRoom::withTrashed()->selectRaw('users.*')
                    ->join('users', 'renter_rooms.user_id', '=', 'users.id')
                    ->where('room_id', $roomId)
                    ->where('contract_id', $contract->id)
                    ->get();
            } else {
                $renterRooms = RenterRoom::withTrashed()->selectRaw('users.*')
                    ->join('users', 'renter_rooms.user_id', '=', 'users.id')
                    ->where(function ($q) use ($contract) {
                        $q->orWhere('contract_id', $contract->id);
                        $q->orWhere('room_contract_id', $contract->id);
                    })
                    ->where('room_id', $roomId)->get();
            }
        } else {
            $renterRooms = \DB::table('users')->where('id', $renterId)->get();
        }

        return response([
            'status' => 1,
            'data' => view('admin2.user.rating', compact('renterRooms', 'contract', 'hostel'))->render()
        ]);
    }

    public function getResidence(Request $request)
    {
        $renterId = $request->input('renter_id');
        $type = $request->input('type', 0);
        $renter = Renter::find($renterId);
        if (!$renter) {
            return response([
                'status' => 0,
                'message' => 'Dữ liệu không hợp lệ'
            ]);
        }

        $residence = Residence::query()
            ->where('user_id', $renter->user_id)
            ->first();
        $userId = $renter->user_id;

        if ($type == 1) {
            $content = [];
            $residence = ResidenceChange::query()
                ->where('user_id', $renter->user_id)
                ->where('type', 0)
                ->first();
            if ($residence) {
                $content = $residence->content;
            }
            return response([
                'status' => 1,
                'data' => view('admin2.renter.residence_change', compact('residence', 'userId', 'content'))->render()
            ]);
        } else if ($type == 2)
        {
            $content = [];
            $residence = ResidenceChange::query()
                ->where('user_id', $renter->user_id)
                ->where('type', 1)
                ->first();
            if ($residence) {
                $content = $residence->content;
            }
            return response([
                'status' => 1,
                'data' => view('admin2.renter.residence_collect', compact('residence', 'userId', 'content'))->render()
            ]);
        }
        return response([
            'status' => 1,
            'data' => view('admin2.renter.residence', compact('residence', 'userId'))->render()
        ]);
    }

    public function updateResidence(Request $request)
    {

        $type = $request->input('type');

        if ($type != 1) {
            $data = $request->except([
                'birthday',
                'summarize_family',
                'summarize_yourself',
                'type'
            ]);
            $birthday = $request->input('birthday');
            try {
                $birthdayCarbon = Carbon::createFromFormat('d/m/Y', $birthday);
                $data['day_birth'] = $birthdayCarbon->copy()->day;
                $data['month_birth'] = $birthdayCarbon->copy()->month;
                $data['year_birth'] = $birthdayCarbon->copy()->year;
            } catch (\Exception $exception) {
            }

            $summarizeFamily = $request->input('summarize_family');

            $summarizeYourself = $request->input('summarize_yourself');

            if (is_array($summarizeFamily)) {
                $data['summarize_family'] = array_values($summarizeFamily);
            }

            if (is_array($summarizeYourself)) {
                $data['summarize_yourself'] = array_values($summarizeYourself);
            }


            Residence::query()
                ->updateOrCreate([
                    'user_id' => $data['user_id']
                ], $data);
        } else if ($type == 1) {
            $data = $request->except([
                'users',
                'type'
            ]);
            $users = $request->input('users');
            $currentResidenceChange = ResidenceChange::query()->where('user_id', $data['user_id'])
                ->where('type', 0)
                ->first();


            if (is_array($users)) {
                $data['users'] = collect($users)->values()->toArray();
            } else {
                if ($currentResidenceChange) {
                    $content = $currentResidenceChange->content;
                    $data['users'] = $content['users'] ?? null;
                }
            }


            ResidenceChange::query()
                ->updateOrCreate([
                    'user_id' => $data['user_id'],
                    'type' => 0
                ], [
                    'user_id' => $data['user_id'],
                    'content' => $data,
                    'type' => 0
                ]);
        }

        return response([
            'status' => 1
        ]);
    }

    public function printResidence(Request $request)
    {
        $renterId = $request->input('renter_id');
        $renter = Renter::find($renterId);
        if (!$renter) {
            return response([
                'status' => 0,
                'message' => 'Dữ liệu không hợp lệ'
            ]);
        }


        $type = $request->input('type');
        if ($type == 1) {
            $residence = ResidenceChange::query()
                ->where('user_id', $renter->user_id)
                ->where('type', 0)
                ->first();
            if (!$residence) {
                $residence = ResidenceChange::create([
                    'user_id' => $renter->user_id,
                    'type' => 0
                ]);
            }

            $content = [];
            if ($residence) {
                $content = $residence->content;
            }
            return view('admin2.renter.print_residence_change', compact('residence', 'content'));
        } else if ($type == 2)
        {
            $residence = ResidenceChange::query()
                ->where('user_id', $renter->user_id)
                ->where('type', 1)
                ->first();
            if (!$residence) {
                $residence = ResidenceChange::create([
                    'user_id' => $renter->user_id,
                    'type' => 1
                ]);
            }

            $content = [];
            if ($residence) {
                $content = $residence->content;
            }
            return view('admin2.renter.print_residence_collect', compact('residence', 'content'));
        }
        $residence = Residence::query()
            ->where('user_id', $renter->user_id)
            ->first();
        if (!$residence) {
            $residence = Residence::create([
                'user_id' => $renter->user_id
            ]);
        }


        return view('admin2.renter.print_residence', compact('residence'));
    }

}
