<?php

namespace App\Http\Controllers\Admin;

use App\Models\RelationLeasePhoto;
use App\Models\TempImageLease;
use App\Services\CompanyApiService;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Models\Lease;
use Illuminate\Support\Facades\Storage;

class LeaseController extends Controller
{

    public function showLease()
    {
        $data = [];
        $user = Auth::user();
        $info = Lease::getDataByCompany();

        $data['active'] = "list";
        $data['leases'] = $info;
        return view('admin.pages.hp-lease', $data);
    }

    public function registLeaseForm(Request $request)
    {
        $data = [];
        $user = Auth::user();
        $data['active'] = "regist";
        $data['today'] = date('Y/m/d');
        $data['id'] = Lease::getMaxNo() + 1;

        return view('admin.pages.hp-regist-lease', $data);
    }

    public function registLease(Request $request, CompanyApiService $apiService)
    {
        $user = Auth::user();

        $max = Lease::getMaxNo();
        $lease_id = $max+1;

        $lease = new Lease;

        $data = $request->all();
        $data['id'] = $lease_id;
        $result = $lease->fill($data)->save();

        $update_data = [];

        if($result) {
            $apiService->registLease($lease);

            $lease_new = Lease::where('id' ,'=',$lease_id)->first();

            $request->session()->flash('message', 'この施設を登録・保存しました。');
            if (isset($request->image)) {
                header('Location: /admin/leaseImage/' . $lease_id);
                die();
            }
            return back()->with('data', $lease_new);

        }
    }

    public function editLeaseForm(Request $request)
    {
        $data = [];
        $user = Auth::user();
        $old = $request->session()->all();

        $lease = Lease::where('id', '=', $request->id)->first();
        $data['active'] = "regist";
        $data['lease'] = $lease;
        return view('admin.pages.hp-edit-lease', $data);
    }

    public function editLease(Request $request, CompanyApiService $apiService)
    {
//        dd($request->all());
        $user = Auth::user();

        // お知らせ登録
        $lease = Lease::where('id', '=', $request->id)->first();
        $save = $request->all();

        $result = $lease->fill($save)->save();
        $request->session()->flash('message', 'この施設を登録・保存しました。');

        $lease = Lease::where('id', '=', $request->id)->first();
        $apiService->editLease($request->id, $lease);

        if (isset($request->image)) {
            header('Location: /admin/leaseImage/' . $request->id);
            die();
        }

        if($result) {
            return back();
        }
    }

    public function delete($id, CompanyApiService $apiService)
    {
        $user = Auth::user();
        Lease::where('id', $id)->delete();
        RelationLeasePhoto::where('lease_id', '=', $id)->delete();
        $apiService->deleteLease($id);
        return back();
    }

    public function deleteImage(Request $request)
    {
        if($request->ajax()){
            $lease = Lease::where('id', '=', $request->id)->first();
            $filePath = $lease->madori_url;
            $lease->update(['madori_url' => ""]);
            Storage::delete($filePath);
        }
    }

    public function showRegistrationImageForm(Request $request)
    {
        $user = Auth::user();
        $data = [];

        $lease = Lease::where('id', $request->id)->first();
        $lease->madori_url = str_replace('public', '/storage', $lease->madori_url);

        $back = route('lease-edit', ['id' => $request->id]);

        $data['back'] = $back;

        $data['lease'] = $lease;

        $data['main_title'] = '';

        $data['saved'] = $request->saved ?? '';

        return view('admin.pages.edit-lease-image', $data);
    }

    public function registImage(Request $request, CompanyApiService $apiService)
    {
        $user = Auth::user();

        // 登録
        $lease = Lease::where('id', '=', $request->id)->first();

        if (is_null($lease)) {
            print('存在しない物件、または不正なアクセスです。');
            exit;
        }
        $all = $request->all();

        if (isset($request->id)) {
            // 間取り画像
            if (isset($request->floor_file_delete_flg) && $request->floor_file_delete_flg == 1) {
                Lease::where('id', $request->id)->update(['madori_url' => '']);
            }
            if (isset($request->file_single_input)) {
                $extension = $request->file_single_input->getClientOriginalExtension();
                $image_url = $request->file_single_input->storeAs('public/company_' . $user->company_id . '/lease', 'lease_image_' . $lease->id . '.' . $extension);
                Lease::where('id', $lease->id)->update(['madori_url' => $image_url]);
            }


            $tmp_image = TempImageLease::where('lease_id', $lease->id)->get();

            $rlsLeaseId = [];
            if (!empty($tmp_image)) {
                $saved_photo_id = explode(',', $request->saved_photo_id);

                $runk = count($saved_photo_id) - count($tmp_image);
                foreach ($tmp_image as $key => $tg) {
                    $photo_data = [
                        'lease_id' => $lease->id,
                        'photo_url' => $tg->file_path,
                        'file_type' => $tg->file_type,
                        'order' => $runk
                    ];
                    $art = RelationLeasePhoto::create($photo_data);
                    array_push($rlsLeaseId, $art['id']);

                    TempImageLease::where('id', $tg->id)->delete();
                    $runk++;
                }
            }
            $request->merge(['rls_lease_id' => $rlsLeaseId]);
            // 写真
            $this->updateImage($request, $lease);
        }

        $data = [];

        $dataSend = Lease::where('id', '=', $request->id)->first();
        $dataSend['tmp_image']  = RelationLeasePhoto::where('lease_id', '=', $request->id)->get();

        $apiService->registImageLease($request->id, $dataSend);

        $data['action'] = route('showLeaseImage', ['id' => $lease->id]);

        return view('admin.pages.redirect', $data);
    }
    public function updateImage($request, $lease)
    {
        $all = $request->all();
        $user = Auth::user();
        $image_len = 0;
        $runk = 1;
        if (isset($request->saved_photo_id)) {
            $array_keys = array_keys($all);
            $matched_keys = array_filter(
                $array_keys,
                function ($k) {
                    return preg_match("/article_photo_id[0-9]*/u", $k);
                }
            );
            $tag = [];
            foreach ($matched_keys as $key) {
                $target_key = str_replace('article_photo_id', '', $key);
                if ($target_key != "") {
                    $tag[] = $target_key;
                }

            }

            $list = explode(',', $request->saved_photo_id);
            $image_len = count($list);
            $rls_key = 0;
            foreach ($tag as $val) {
                if (!empty($request->{'article_photo_id' . $val})) {
                    $target_id =  $request->{'article_photo_id' . $val};
                } else {
                    $target_id =  $request->rls_lease_id[$rls_key] ?? "";
                    $rls_key ++;
                }

                $photo_data = [
                    'order' => $runk
                ];
                RelationLeasePhoto::where('id', '=', $target_id)->update($photo_data);
                $runk++;
            }
        } else {
            $array_keys = array_keys($all);
            $matched_keys = array_filter(
                $array_keys,
                function ($k) {
                    return preg_match("/article_photo_id[0-9]*/u", $k);
                }
            );
            $tag = [];

            foreach ($matched_keys as $key) {
                $target_key = str_replace('article_photo_id', '', $key);
                if ($target_key != "") {
                    $tag[] = $target_key;
                }

            }
            $rls_key = 0;
            foreach ($tag as $val) {
                if (!empty($request->{'article_photo_id' . $val})) {
                    $target_id = $request->{'article_photo_id' . $val};
                } else {
                    $target_id =  $request->rls_lease_id[$rls_key] ?? "";
                    $rls_key ++;
                }

                $photo_data = [
                    'order' => $runk
                ];
                RelationLeasePhoto::where('id', '=', $target_id)->update($photo_data);
                $runk++;
            }
        }

        if (isset($request->del_photo_id)) {
            $list = explode(',', $request->del_photo_id);
            foreach ($list as $key => $val) {
                RelationLeasePhoto::where('id', '=', $val)->delete();
                $runk--;
            }
        }
    }
}
