<?php

namespace App\Console\Commands\Converters;

use App\Models\Article;
use App\Models\MstCity;
use App\Models\MstPrefecture;
use App\Models\MstTown;
use App\Models\RelationSpring;
use App\Models\UserInfo;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;

class SuumoMansionConverter
{
    // SUUMO管理形態変換配列
    const KANRIKEITAI_CONVERT_ARR = [
        10 => 'a', //一部委託(勤務形態未定)
        11 => 'b', //一部委託(管理員なし)
        12 => 'c', //自主管理(通勤)
        13 => 'd', //自主管理(常駐)
        14 => 'e', //自主管理(巡回)
        15 => 'f', //自主管理(勤務形態未定)
        16 => 'g', //自主管理(管理員なし)
    ];

    public static function convert($article)
    {
        $data = [];
        $mansion = Article::getParentMansion($article->mansion_id);;

        //種別
        if($mansion->property == 6) {
            $data['kotoriBukkenShuCd'] = 11;
        } else if($mansion->property == 7) {
            $data['kotoriBukkenShuCd'] = 12;
        }

        //マンション名
        $data['bukkenNm1'] = mb_substr($article->name_portal, 0, 42);

        //物件所在地
        $zipParts = explode('-', $mansion->zip);
        $data['yubinbango01'] = self::limit(Arr::get($zipParts, 0), 3);
        $data['yubinbango02'] = self::limit(Arr::get($zipParts, 1), 4);
        $data["shakuchikenWariaiMin"] = $mansion->leasehold_rate;
        $data['todofukenCd'] = $mansion->address1;
        $data['shikugunCd'] = $mansion->address2;
        $data['ooazaCd'] = $mansion->address3;

        $prefecture = MstPrefecture::getName($mansion->address1);
        $city = MstCity::getName($mansion->address1, $mansion->address2);
        $town = MstTown::getName($mansion->address1, $mansion->address2, $mansion->address3);

        $data['todofukenNm'] = optional($prefecture)->name;
        $data['shikugunNm'] = optional($city)->name;
        $data['ooazaNm'] = optional($town)->name;
        $data['azaNm'] = '';

        //住所末尾
        $data['jushoMatsubi'] = $mansion->address4;
        $data['azaCd'] = '000';

        if(strpos($mansion->address4, '丁目')){
            $data['jushoMatsubi'] = Str::substr($mansion->address4, 3);
            $data['azaCd'] = '00'.Str::substr($mansion->address4, 0, 1);
        }else{
            /*if($article->address4 != ''){
                $POST_DATA['jushoMatsubi'] = $article->address4;
                $str_address = explode('-',$article->address4);
                $data['azaCd'] = '00'.$str_address[0];
                if(count($str_address) > 1){
                    unset($str_address[0]);
                    $data['jushoMatsubi'] = implode('-', $str_address);
                }
            }*/
        }

        //周辺環境地図
        $latLngPattern = '/^\d+\.\d{6,}$/';

        if(preg_match($latLngPattern, $article->lat) &&
            preg_match($latLngPattern, $article->lng)) {
            $latitudeParts = explode('.', $article->lat);
            $firstLatitudePart = Arr::get($latitudeParts, 0);
            $secondLatitudePart = self::limit(Arr::get($latitudeParts, 1), 6);

            $data['ido'] = $firstLatitudePart . '.' . implode('.', str_split($secondLatitudePart, 2));

            $longitudeParts = explode('.', $article->lng);
            $firstLongitudePart = Arr::get($longitudeParts, 0);
            $secondLongitudePart = self::limit(Arr::get($longitudeParts, 1), 6);
            $data['keido'] = $firstLongitudePart . '.' . implode('.', str_split($secondLongitudePart, 2));
        }

        //交通
        $data['denshaBusKb1'] = 1;

        if ($mansion->main_traffic == 1 &&
            !empty($mansion->main_traffic_line) &&
            !empty($mansion->main_traffic_station) &&
            !empty($mansion->main_traffic_time)) {
            $data['ensenNm1'] = self::limit($mansion->main_traffic_line, 30);
            $data['ensenCd1'] = '0010';
            $data['ekiNm1'] = self::limit($mansion->main_traffic_station, 40);
            $data['ekiCd1'] = '07240';
            $data['kotsuKbn1'] = 1;
            $data['tohoJikan1'] = self::limit($mansion->main_traffic_time, 2);
        } elseif ($mansion->main_traffic == 2 &&
            !empty($mansion->main_traffic_bus_time) &&
            !empty($mansion->main_traffic_bus) &&
            !empty($mansion->main_traffic_bus_walk)) {
            $data['ensenNm1'] = self::limit($mansion->main_traffic_line, 30);
            $data['ekiNm1'] = self::limit($mansion->main_traffic_station, 40);
            $data['kotsuKbn1'] = 2;
            $data['tohoJikan1'] = self::limit($mansion->main_traffic_bus_walk, 2);
            $data['ensenCd1'] = '0010';
            $data['ekiCd1'] = '07240';
            $data['busJikan1'] = self::limit($mansion->main_traffic_bus_time, 2);
            $data['busTei1'] = self::limit($mansion->main_traffic_bus, 40);
            $data['teihoJikan1'] = self::limit($mansion->main_traffic_bus_walk, 2);
        }

        $data['denshaBusKb2'] = 1;
        if ($mansion->sub_traffic1 == 1 &&
            !empty($mansion->sub_traffic1_line) &&
            !empty($mansion->sub_traffic1_station) &&
            !empty($mansion->sub_traffic1_time)) {
            $data['ensenNm2'] = self::limit($mansion->sub_traffic1_line, 30);
            $data['ensenCd2'] = '0010';
            $data['ekiNm2'] = self::limit($mansion->sub_traffic1_station, 30);
            $data['ekiCd2'] = '07240';
            $data['kotsuKbn2'] = 1;
            $data['tohoJikan2'] = self::limit($mansion->sub_traffic1_time, 2);
        } elseif ($mansion->sub_traffic1 == 2 &&
            !empty($mansion->sub_traffic1_bus_time) &&
            !empty($mansion->sub_traffic1_bus) &&
            !empty($mansion->sub_traffic1_bus_walk)) {
            $data['ensenNm2'] = self::limit($mansion->sub_traffic1_line, 30);
            $data['ekiNm2'] = self::limit($mansion->sub_traffic1_station, 40);
            $data['kotsuKbn2'] = 2;
            $data['tohoJikan2'] = self::limit($mansion->sub_traffic1_bus_walk, 2);
            $data['ensenCd2'] = '0010';
            $data['ekiCd2'] = '07240';
            $data['busJikan2'] = self::limit($mansion->sub_traffic1_bus_time, 2);
            $data['busTei2'] = self::limit($mansion->sub_traffic1_bus, 40);
            $data['teihoJikan2'] = self::limit($mansion->sub_traffic1_bus_walk, 2);
        }

        $data['denshaBusKb3'] = 1;
        if ($mansion->sub_traffic2 == 1 &&
            !empty($mansion->sub_traffic2_line) &&
            !empty($mansion->sub_traffic2_station) &&
            !empty($mansion->sub_traffic2_time)) {
            $data['ensenNm3'] = self::limit($mansion->sub_traffic2_line, 30);
            $data['ensenCd3'] = '0010';
            $data['ekiNm3'] = self::limit($mansion->sub_traffic2_station, 40);
            $data['ekiCd3'] = '07240';
            $data['kotsuKbn3'] = 1;
            $data['tohoJikan3'] = self::limit($mansion->sub_traffic2_time, 2);
        } elseif ($mansion->sub_traffic2 == 2 &&
            !empty($mansion->sub_traffic2_bus_time) &&
            !empty($mansion->sub_traffic2_bus) &&
            !empty($mansion->sub_traffic2_bus_walk)) {
            $data['ensenNm3'] = self::limit($mansion->sub_traffic2_line, 30);
            $data['ekiNm3'] = self::limit($mansion->sub_traffic2_station, 40);
            $data['kotsuKbn3'] = 2;
            $data['tohoJikan3'] = self::limit($mansion->sub_traffic2_bus_walk, 2);
            $data['ensenCd3'] = '0010';
            $data['ekiCd3'] = '07240';
            $data['busJikan3'] = self::limit($mansion->sub_traffic2_bus_time, 2);
            $data['busTei3'] = self::limit($mansion->sub_traffic2_bus, 40);
            $data['teihoJikan3'] = self::limit($mansion->sub_traffic2_bus_walk, 2);
        }

        //担当者名
        $userInfo = UserInfo::getDataById($article->hp_charge);
        if($userInfo) {
            $fullname = implode(' ', [$userInfo->last_name, $userInfo->first_name]);
            $data['kishaEigyoMei'] = self::limit($fullname, 20);
        }

        //スタッフコメント
        $cmSpecialChars = array("━","‐", "―", "－", "–", "-", "−", "ﾌ", "ｧ", "ﾐ", "ﾘ", "ｰ", "ﾏ", "ｰ", "ﾄ", "ｾ", "ﾌ", "ﾞ", "ﾝ", "ｲ", "ﾚ", "ﾌ", "ﾞ", "ﾝ", "ﾛ", "ｿ", "ﾝ", "ｾﾌﾞﾝｲﾚﾌﾞﾝ");

        $staffComment = str_replace($cmSpecialChars, '', $article->comment);
        //$data['staffComment'] = self::limit($staffComment, 200);

        //社内メモ1
        $memo1 = str_replace($cmSpecialChars, '', $article->memo1);
        $data['kishaComment1'] = "";

        //社内メモ2
        $memo2 = str_replace($cmSpecialChars, '', $article->memo2);
        $data['kishaComment2'] = "";

        //価格
        $data['kakakuMin'] = self::limit($article->price, 8);

        //管理形態
        if($mansion->management_form != 0) {
            $data['kanriKeitai'] = self::setManagementForm($mansion->management_form);
        } else {
            $data['kanriKeitai'] = "";
        }

        //管理費
        $data['kanrihiUmu'] = $article->management ?? 0;

        if($article->management != 0 &&
            $article->management != null) {
            $data['kanrihiMin'] = self::limit($article->management_cost ?? 0, 6);
            $data['kanrihiTaniKbn'] = $article->management_cost_unit;
        }

        //修繕積立金
        $data['sznTmtKinKbn'] = $article->repair == 1 ? 2 : 1;

        if($article->repair == 1 ) {
            $data['sznTmtKinMin'] = self::limit($article->repair_cost ?? 0, 8);
            $data['sznTmtKinTaniKbn'] = $article->repair_cost_unit;
        }

        $dataParking = [
            1 => 5,
            2 => 5,
            1 => 5,
            1 => 5,
        ];

        switch ($article->parking) {
            case 1:
                $data["chushajoKbn"] = 5;
                break;
            case 2:
                $data["chushajoKbn"] = 1;
                $data["chushajoUmu"] = 1;
                break;
            case 3:
                $data["chushajoKbn"] = 1;
                $data["chushajoUmu"] = 2;
                $data["chushajoNaigaiKbn"] = 1;
                $data["chushajoRyoKbn1"] = $article->parking_yes;
                if ($article->parking_yes) {
                    $data["chushajoRyoMin1"] = $article->parking_yes_cost_from;
                    $data["chushajoRyoHaniKbn"] = intval($article->parking_yes_cost_range) - 1;
                    $data["chushajoRyoMax"] = $article->parking_yes_cost_to;
                    $data["chushajoRyoTaniKbn1"] = intval($article->parking_yes_cost_unit);
                }
                break;
            case 4:
                $data["chushajoKbn"] = 2;
                $data["bnjCsjKakakuMin1"] = $article->parking_require_cost;

                $data["bnjCsjKanrihiUmu"] = $article->parking_require_management;
                $data["bnjCsjKanrihi"] = $article->parking_require_management_cost;
                $data["bnjCsjKanrihiTaniKbn"] = $article->parking_require_management_unit;

                $data["bnjCsjSznTmtKinUmu"] = $article->parking_require_repair;
                $data["bnjCsjSznTmtKin"] = $article->parking_require_repair_cost;
                $data["bnjCsjSznTmtKinTaniKbn"] = $article->parking_require_repair_unit;

                $data["bnjCsjSznTmtKikinUmu"] = $article->parking_require_fund;
                $data["bnjCsjSznTmtKikin"] = $article->parking_require_fund_cost;
                break;
            case 5:
                $data["chushajoKbn"] = 3;
                $data["bnjCsjKakakuMin2"] = $article->parking_any_cost_from;
                $data["bnjCsjKakakuHaniKbn"] = intval($article->parking_any_cost_range) - 1;
                $data["bnjCsjKakakuMax"] = $article->parking_any_cost_to;

                $data["bnjCsjKanrihiUmu"] = $article->parking_any_management;
                $data["bnjCsjKanrihi"] = $article->parking_any_management_cost;
                $data["bnjCsjKanrihiTaniKbn"] = $article->parking_any_management_unit;

                $data["bnjCsjSznTmtKinUmu"] = $article->parking_any_repair;
                $data["bnjCsjSznTmtKin"] = $article->parking_any_repair_cost;
                $data["bnjCsjSznTmtKinTaniKbn"] = $article->parking_any_repair_unit;

                $data["bnjCsjSznTmtKikinUmu"] = $article->parking_any_fund;
                $data["bnjCsjSznTmtKikin"] = $article->parking_any_fund_cost;
                break;
            case 6:
                $data["chushajoKbn"] = 4;
                $data["chushajoRyoKbn2"] = $article->parking_designated;
                $data["chushajoRyoMin2"] = $article->parking_designated_cost;
                $data["chushajoRyoTaniKbn2"] = intval($article->parking_designated_unit);
                break;
            default:
                $data["chushajoKbn"] = 0;
                break;
        }

        if ($article->parking_out == 1 && !in_array($article->parking, [4, 5, 6])) {
            if ($article->parking > 1) {
                $data["chushajoKbn"] = 1;
                $data["chushajoUmu"] = 2;
                $data["chushajoNaigaiKbn"] = 2;

                if ($article->parking == 3) {
                    $data["chushajoNaigaiKbn"] = 1;
                    $data["chushajoRyoMin1"] = "";
                    $data["chushajoRyoHaniKbn"] = "";
                    $data["chushajoRyoMax"] = "";
                    $data["chushajoRyoTaniKbn1"] = "";
                }
            } else {
                $data["chushajoKbn"] = 1;
                $data["chushajoUmu"] = 2;
                $data["chushajoNaigaiKbn"] = 2;
                $data["chushajoRyoKbn1"] = 1;

                $data["chushajoRyoMin1"] = $article->parking_out_cost_from;
                $data["chushajoRyoHaniKbn"] = intval($article->parking_out_cost_range) - 1;
                $data["chushajoRyoMax"] = $article->parking_out_cost_to;
                $data["chushajoRyoTaniKbn1"] = intval($article->parking_out_cost_unit);
            }
        }

        //町会費など
        $data['chokaihiKbn'] = $article->council;

        if ($article->council != 0) {
            $data['chokaihiUmu'] = $article->council_presence + 1;

            if ($article->council_presence == 1) {
                $data['chokaihiRyo'] = self::limit($article->council_cost, 8);

                if ($article->council_cost_unit != 0) {
                    $data['chokaihiRyoTaniKbn'] = $article->council_cost_unit;
                }
            }
        }

        //有線放送に係る費用
        if($article->broadcasting == 1) {
            $article['yusenHiyoUmu'] = 1;
            if($article->broadcasting_presence == 0) {
                $data['yusenShokiHiyoUmu'] = 1;
            } elseif($article->broadcasting_presence == 1) {
                $data['yusenShokiHiyoUmu'] = 2;
                $data['yusenShokiHiyo'] = $article->broadcasting_cost;
            } elseif($article->broadcasting_presence == 2) {
                $data['yusenShokiHiyoUmu'] = 3;
            }

            if($article->broadcasting_fixed_presence == 0) {
                $data['yusenTeigakuRyoUmu'] = 1;
                $data['yusenTeigakuRyoTaniKbn'] = $article->broadcasting_fixed_cost_unit;
            } elseif($article->broadcasting_fixed_presence == 1) {
                $data['yusenTeigakuRyoUmu'] = 2;
                $data['yusenTeigakuRyo'] = self::limit($article->broadcasting_fixed_cost, 8);
                $data['yusenTeigakuRyoTaniKbn'] = $article->broadcasting_fixed_cost_unit;
            } elseif($article->broadcasting_fixed_presence == 2) {
                $data['yusenTeigakuRyoUmu'] = 3;
                $data['yusenTeigakuRyoTaniKbn'] = $article->broadcasting_fixed_cost_unit;
            }
        } elseif($article->broadcasting == 2) {
            $article['yusenHiyoUmu'] = 0;
        }

        //インターネットに係る費用
        $data['internetHiyoUmu'] = $article->internet;

        if($article->internet == 1) {
            if($article->internet_presence == 0) {
                $data['internetShokiHiyoUmu'] = 1;
            } elseif($article->internet_presence == 1) {
                $data['internetShokiHiyoUmu'] = 2;
                $data['internetShokiHiyo'] = self::limit($article->internet_cost, 8);
            } elseif($article->internet_presence == 2) {
                $data['internetShokiHiyoUmu'] = 3;
            }

            if($article->internet_fixed_presence == 0) {
                $data['internetTeigakuRyoUmu'] = 1;
                $data['internetTeigakuRyoTaniKbn'] = $article->internet_fixed_cost_unit;
            } elseif($article->internet_fixed_presence == 1) {
                $data['internetTeigakuRyoUmu'] = 2;
                $data['internetTeigakuRyo'] = self::limit($article->internet_fixed_cost, 8);
                $data['internetTeigakuRyoTaniKbn'] = $article->internet_fixed_cost_unit;
            } elseif($article->internet_fixed_presence == 2) {
                $data['internetTeigakuRyoUmu'] = 3;
                $data['internetTeigakuRyoTaniKbn'] = $article->internet_fixed_cost_unit;
            }
        } elseif($article->internet == 2) {
            $data['internetHiyoUmu'] = 0;
        }

        //CATVに係る費用
        $data['catvHiyoUmu'] = $article->catv;

        if($article->catv == 1) {
            if($article->catv_presence == 0) {
                $data['catvShokiHiyoUmu'] = 1;
            } elseif($article->catv_presence == 1) {
                $data['catvShokiHiyoUmu'] = 2;
                $data['catvShokiHiyo'] = self::limit($article->catv_cost, 8);
            } elseif($article->catv_presence == 2) {
                $data['catvShokiHiyoUmu'] = 3;
            }

            if($article->catv_fixed_presence == 0) {
                $data['catvTeigakuRyoUmu'] = 1;
                $data['catvTeigakuRyoTaniKbn'] = $article->catv_fixed_cost_unit;
            } elseif($article->catv_fixed_presence == 1) {
                $data['catvTeigakuRyoUmu'] = 2;
                $data['catvTeigakuRyo'] = self::limit($article->catv_fixed_cost, 8);
                $data['catvTeigakuRyoTaniKbn'] = $article->catv_fixed_cost_unit;
            } elseif($article->catv_fixed_presence == 2) {
                $data['catvTeigakuRyoUmu'] = 3;
                $data['catvTeigakuRyoTaniKbn'] = $article->catv_fixed_cost_unit;
            }
        } elseif($article->catv == 2) {
            $data['catvHiyoUmu'] = 0;
        }

        //温泉
        $SPRING_OPTIONS = [1 => 1, 2 => 2, 0 => 0];
        $SPRING_PRESENCE_OPTIONS = [0 => 1, 1 => 2, 2 => 3];

        $data['onsenKenKbn'] = Arr::get($SPRING_OPTIONS, $article->spring ?? '');

        if ($article->spring != 0) {
            if (!is_null($article->spring_presence)) {
                $data['onsenKenRyoUmu'] = Arr::get($SPRING_PRESENCE_OPTIONS, $article->spring_presence);
            }

            if ($article->spring_presence == 1) {
                $data['onsenKenRyo'] = self::limit($article->spring_cost, 8);

                if ($article->spring_cost_unit != 0) {
                    $data['onsenKenRyoTaniKbn'] = $article->spring_cost_unit;
                }
            }

            $sprindKinds = RelationSpring::where('article_id', $article->building_id)
                ->pluck('item_id');

            $SPRING_KING_NAMES = [
                1 => 'onsenKenKaonUmu', 2 => 'onsenKenKasuiUmu', 3 => 'onsenKenHakobiyuUmu',
                4 => 'onsenKenJunkanUmu', 5 => 'onsenKenRokaUmu'
            ];

            foreach ($sprindKinds as $sprindKind) {
                $sprindKindName = $SPRING_KING_NAMES[$sprindKind];
                $data[$sprindKindName] = 1;
            }
        }

        //その他諸費1
        if (!empty($article->another_cost_name1) &&
            is_numeric($article->another_cost1) &&
            is_numeric($article->another_cost_unit1)) {
            $data['sonota01Nm'] = self::limit($article->another_cost_name1, 40);
            $data['sonotaRyo01Min'] = self::limit($article->another_cost1, 8);
            $data['sonotaRyo01TaniKbn'] = $article->another_cost_unit1;
        }

        //その他諸費2
        if (!empty($article->another_cost_name2) &&
            is_numeric($article->another_cost2) &&
            is_numeric($article->another_cost_unit2)) {
            $data['sonota02Nm'] = self::limit($article->another_cost_name2, 40);
            $data['sonotaRyo02Min'] = self::limit($article->another_cost2, 8);
            $data['sonotaRyo02TaniKbn'] = $article->another_cost_unit2;
        }

        //敷地権利
        if($mansion->land_right != 0) {
            $data["shikichiKenri"] = $mansion->land_right;
        } else {
            $data["shikichiKenri"] = '1';
        }
        if ($data["shikichiKenri"] != 0 && $data["shikichiKenri"] != 1) {
            $data["shakuchikenShosaiKbn"] = $mansion->leasehold_kind;
            $data["chidaiKbn"] = $mansion->land_rent == 0 ? "1" : "4";
            $data["chidaiMin"] = mb_substr($mansion->land_rent_val, 0, 8);
            $data["chidaiTaniKbn"] = $mansion->land_rent_unit;
            $data["shakuchiKikanKbn"] = $mansion->leasehold_period;
            $data["shakuchiKikanNen"] = mb_substr($mansion->leasehold_period_year, 0, 3);
            $data["shakuchiKikanTsuki"] = mb_substr($mansion->leasehold_period_month, 0, 2);
            $data["kenrikinUmu"] = $mansion->right_cost;
            $data["kenrikinMin"] = mb_substr($mansion->right_cost_val, 0, 6);
            $data["hoshokinUmu"] = $mansion->deposit_cost;
            $data["hoshokinShikikinMin"] = mb_substr($mansion->deposit_cost_val, 0 , 9);
            $data["shikikinUmu"] = $mansion->security_deposit_cost;
            $data["shikikinMin"] = mb_substr($mansion->security_deposit_cost_val, 0, 9);
            $data["tisSonotaKeiyakuJoko"] = $mansion->other_leasehold;
            if (
                $mansion->leasehold_kind == 3 ||
                $mansion->leasehold_kind == 4 ||
                $mansion->leasehold_kind == 7 ||
                $mansion->leasehold_kind == 8
            ) {
                if ($mansion->regular_leased_registration == 2) {
                    $data["tisSetteiToki"] = 3;
                } else if ($mansion->regular_leased_registration == 3) {
                    $data["tisSetteiToki"] = 2;
                } else {
                    $data["tisSetteiToki"] = $mansion->regular_leased_registration;
                }
                $data["tisChinryoKaiteijikiKbn"] = $mansion->regular_leased_season;
                $data["tisChinryoKaiteijiki"] = $mansion->regular_leased_season_nen;
                $data["tisChinryoKaiteigakuKbn"] = $mansion->regular_leased_cost;
                $data["tisJttKahiKbn"] = $mansion->regular_leased_transfer;
                if ($data["tisJttKahiKbn"] == 1) {
                    $data["tisJttShodakuYohiKbn"] = $mansion->regular_leased_transfer_method;
                    $data["tisJttShodakuryoKbn"] = $mansion->regular_leased_transfer_necessity;
                    $data["tisJttShodakunushiKbn"] = $mansion->regular_leased_transfer_consent;
                }
            }
        }

        //借地権種別/詳細
        //地代
        //借地期間
        //権利金
        //保証金
        //敷金
        //借地権その他契約事項

        //用途地域
        $USE_AREA_OPTIONS = [
            1 => '01', 2 => '04', 3 => '06', 4 => '08', 5 => '09', 6 => '10', 7 => '11',
            8 => '12', 10 => '02', 11 => '03', 12 => '05', 13 => '07', 14 => '16'
        ];

        $data['yotochiikiCd01'] = '00';
        $data['yotochiikiCd01'] = Arr::get($USE_AREA_OPTIONS, $mansion->use_area ?? '', '00');

        $LAND_AREA_OPTIONS = [
            1 => '01', 2 => '04', 3 => '06', 4 => '08', 5 => '09', 6 => '10', 7 => '11',
            8 => '12', 10 => '02', 11 => '03', 12 => '05', 13 => '07', 14 => '16'
        ];
        $data['yotochiikiCd02'] = '00';
        if($mansion->land_use != null){
            $data['yotochiikiCd02'] = Arr::get($LAND_AREA_OPTIONS, $mansion->land_use, '00');
        }

        switch ($article->city_plan) {
            case 1:
                break;
            case 2:
                $data["yotochiikiCd01"] = 14;
                $data["kenchikuKyokaKbn"] = $article->city_plan_reason;
                break;
            case 4:
                $data["yotochiikiCd01"] = 15;
                break;
        }

        //専有面積
        $data['senyumensekiKbn'] = $article->total_area;

        $totalAreaValParts = explode('.', $article->total_area_val);
        $data['senyumensekiMinS'] = self::limit(Arr::get($totalAreaValParts, 0), 4);
        $data['senyumensekiMinL'] = self::limit(Arr::get($totalAreaValParts, 1), 2);

        //間取りタイプ
        $FLOOR_PLAN_TYPE_OPTIONS = [
            1 => '03', 2 => '04', 3 => '01', 4 => '02', 7 => '05'
        ];

        if($article->floor_plan_type != 3) {
            $data['madoriMin'] = self::limit($article->floor_plan, 2);
        }

        if(is_numeric($article->floor_plan_type)) {
            $data['madoriMinType1Kbn'] = Arr::get($FLOOR_PLAN_TYPE_OPTIONS, $article->floor_plan_type, '00');
        }

        if($article->floor_plan_type == 5) {
            $data['madoriMinType1Kbn'] = '02';
            $data["madoriMinType2Kbn"] = '1';
        } elseif($article->floor_plan_type == 6) {
            $data['madoriMinType1Kbn'] = '03';
            $data["madoriMinType2Kbn"] = '1';
        } elseif($article->floor_plan_type == 8) {
            $data['madoriMinType1Kbn'] = '05';
            $data["madoriMinType2Kbn"] = '1';
        } elseif($article->floor_plan_type == 9) {
            $data['madoriMinType1Kbn'] = '04';
            $data["madoriMinType2Kbn"] = '1';
        }

        //バルコニー面積
        $data['balUmu'] = $article->balcony_area;

        $balconyAreaParts = explode('.', $article->balcony_area_val);
        $data['balMensekiMinS'] = self::limit(Arr::get($balconyAreaParts, 0), 4);
        $data['balMensekiMinL'] = self::limit(Arr::get($balconyAreaParts, 1), 2);

        //ルーフバルコニー面積
        if ($article->loof_balcony_area) {
            $loofBalconyAreaParts = explode('.', $article->loof_balcony_area_val);
            $data['roofBalMensekiMinS'] = self::limit(Arr::get($loofBalconyAreaParts, 0), 4);
            $data['roofBalMensekiMinL'] = self::limit(Arr::get($loofBalconyAreaParts, 1), 2);

            $data['roofBalRyoMin'] = self::limit($article->loof_balcony_area_cost, 8);
            $data['roofBalRyoTaniKbn'] = $article->loof_balcony_area_unit;
        }

        //専用庭面積
        if ($article->garden_area) {
            $gardenAreaParts = explode('.', $article->garden_area_val);
            $data['senyoNiwaMensekiMinS'] = self::limit(Arr::get($gardenAreaParts, 0), 4);
            $data['senyoNiwaMensekiMinL'] = self::limit(Arr::get($gardenAreaParts, 1), 2);

            $data['senyoNiwaRyoMin'] = self::limit($article->garden_area_cost, 5);
            $data['senyoNiwaRyoTaniKbn'] = $article->garden_area_unit;
        }

        //テラス面積
        if ($article->terrace_area) {
            $terraceAreaParts = explode('.', $article->terrace_area_val);
            $data['terraceMensekiMinS'] = self::limit(Arr::get($terraceAreaParts, 0), 4);
            $data['terraceMensekiMinL'] = self::limit(Arr::get($terraceAreaParts, 1), 2);

            $data['terraceRyoMin'] = self::limit($article->terrace_area_cost, 8);
            $data['terraceRyoTaniKbn'] = $article->terrace_area_unit;
        }

        //総戸数
        $data['soKosu'] = $mansion->total_unit;

        //完成時期
        $data['kanseiJikiNen'] = self::limit($mansion->age_year ?? 1965, 4);
        $data['kanseiJikiTsuki'] = self::limit($mansion->age_month ?? 1, 2);

        //建物状況
        if ($article->occupied) {
            $data['tatemonoJokyoKbn'] = 2;
        } else {
            if ($mansion->property_sub == 1) {
                $data['tatemonoJokyoKbn'] = 1;
            } else {
                $data['tatemonoJokyoKbn'] = 3;
            }
        }

        //入居予定
        if($article->move_in == 1) {
            $data['nyukyoJikiKbn'] = 1;
        } elseif($article->move_in == 2) {
            $data['nyukyoJikiKbn'] = 4;
        } elseif($article->move_in == 3) {
            $data['nyukyoJikiKbn'] = 2;
            $data['nyukyoJikiNen'] = self::limit($article->move_in_year, 4);
            $data['nyukyoJikiTsuki'] = self::limit($article->move_in_month, 2);
        }  elseif($article->move_in == 4) {
            $data['nyukyoJikiKbn'] = 3;
            $data['nyukyoJikiTsukiSu'] = self::limit($article->move_in_contract_month, 2);
        }

        //構造
        $CONSTRUCTION_OPTIONS = [
            1 => '03', 3 => '04', 4 => '01', 5 => '02',
            6 => '06', 7 => '07', 8 => '05', 9 => '08',
            2 => '09', 11 => '09', 10 => '09'
        ];

        $data['kozoKbn'] = Arr::get($CONSTRUCTION_OPTIONS, $mansion->construction ?? '', '00');
        if($mansion->construction_sub != null){
            $data['kozoKbnIchibu'] = Arr::get($CONSTRUCTION_OPTIONS, $mansion->construction_sub);
        }

        if ($data["kozoKbn"] == "09") {
            $dataConstruction = [
                2 => "ブロック造",
                11 => "RCB造",
                10 => "WRC造"
            ];
            $data["kozoSonotaComment"] = $dataConstruction[$mansion->construction] ?? "";
        }

        //建物階建て
        $data['chijokaidate'] = self::limit($mansion->floor, 3);
        $data['chikakaidate'] = self::limit($mansion->underground, 1);

        //所在階
        $data['shozaiKaiComment'] = self::limit($article->whereabouts, 5);

        //部屋番号
        $data['heyaNo'] = self::limit($article->room_num, 200);

        //部屋番号
        $balconyDirection = [
            1 => 4, //北
            2 => 5, // 北東
            3 => 1, // 東
            4 => 6, // 南東
            5 => 3, // 南
            6 => 8, // 南西
            7 => 2, // 西
            8 => 7 // 北西
        ];

        $data['kaikoMuki'] = $balconyDirection[$article->balcony_direction] ?? 0;

        //施工会社
        $data['sekoKaishaNm'] = self::limit($mansion->construction_company, 200);

        //リフォーム
        $data['gaisoUmu'] = "";

//        if(in_array($article->exterior, [2, 3])) {
//            $data['gaisoNen'] = self::limit($article->exterior_year, 4);
//            $data['gaisoTsuki'] = self::limit($article->exterior_month, 2);
//        }

        $data['naisoUmu'] = $article->interior;

        if(in_array($article->interior, [2, 3])) {
            $data['naisoNen'] = self::limit($article->interior_year, 4);
            $data['naisoTsuki'] = self::limit($article->interior_month, 2);
            $data["naisoComment"] = $article->interior_text;
        }

        $interiors = $article->interiors;
        foreach ($interiors as $interior) {
            $data["naisoKasho{$interior->item_id}"] = "1";
        }

        //広告主（貴社）会社取引態様（取引様態）
        $COMPANY_MANNER_OPTIONS = [
            1 => '01', 2 => '13', 3 => '09', 4 => '10',
            5 => '11', 6 => '06', 7 => '07', 9 => '12',
        ];

        $data['torihikitaiyoKbn01'] = '00';
        if(!is_null($article->company_manner)) {
            $data['torihikitaiyoKbn01'] = Arr::get($COMPANY_MANNER_OPTIONS, $article->company_manner);
        }

        //その他制限事項
        $data['kckKjn43joTadashigakiKbn'] = $mansion->other_reason;
        $data['sgnJikoComment'] = self::limit($mansion->other_comment, 350);

        //区分
        //事業用用途
        $USE_METHOD_OPTIONS = [
            1 => '07', 2 => '08', 3 => '09', 4 => '01', 5 => '02',
            6 => '06', 7 => '04', 8 => '03', 9 => '99'
        ];

        if($article->classfication ==1) {
            $data['jigKbn'] = 0;
        } else {
            $data['jigKbn'] = $article->classfication - 1;

            if ($article->trading_classfication == 1) {
                $data["baibaiKbn"] = "01";
            } else {
                $data["baibaiKbn"] = "03";
            }

            $data["jigyoHikiwatashiKbn"] = "0{$article->business_status}";

            if ($article->investment_status == 1) {
                $data["jigToshiGenjoKbn"] = "01";
            } else if ($article->investment_status == 2) {
                $data["jigToshiGenjoKbn"] = "02";
                $data["jigToshiShunyu"] = $article->investment_performance;
                $data["jigToshiShunyuTaniKbn"] = $article->investment_performance_unit;

                $investmentInterest = explode('.', $article->investment_interest);
                $data['jigToshiNenRimawariS'] = self::limit(Arr::get($investmentInterest, 0), 2);
                $data['jigToshiNenRimawariL'] = self::limit(Arr::get($investmentInterest, 1), 2);
            }

            if(!is_null( $article->use_method)) {
                $data['jigYotoKbn'] = Arr::get($USE_METHOD_OPTIONS, $article->use_method);
            }

            if($article->use_method == 9) {
                $data['jigComment'] = self::limit($article->use_method_text, 20);
            }
        }

        //売買区分

        //メインキャッチ

        //サブキャッチ
        $netCatch = str_replace($cmSpecialChars, '', $article->suumo_copy);
        $netComment = str_replace($cmSpecialChars, '', $article->suumo_comment);

        $data['netCatch'] = self::limit($netCatch, 84);
        $data['netComment'] = self::limit($netComment, 300);

        //共通
        $data['eventInfoKbn'] = $article->event_category; //タイトル
        if ($data["eventInfoKbn"] == 5) {
            $data["eventInfoKbn"] = 6;
        }
        $data['eventScheduleKbn'] = $article->event_schedule ? $article->event_schedule : 0; //日程

        if($article->event_schedule == 3) {
            $eventDays = explode(',', $article->event_day);
            foreach ($eventDays as $index => $eventDay) {
                $data['eventDate1'.($index + 1)] = str_replace("-", "/", self::limit($eventDay, 10));
            }
        } else if ($article->event_schedule == 4) {
            $data['kikanEventKaishiDate1'] = str_replace("-", "/", self::limit($article->from_event, 10));
            $data['kikanEventShuryoDate1'] = str_replace("-", "/", self::limit($article->to_event, 10));
        }

        //ネット（時間）
        if(is_numeric($article->from_hour) &&
            is_numeric($article->from_minute) &&
            is_numeric($article->to_hour) &&
            is_numeric($article->to_minute)) {
            $data['netEventKaishiTimeH'] = $article->from_hour;
            $data['netEventKaishiTimeM'] = sprintf('%02d', $article->from_minute - ($article->from_minute % 15));
            $data['netEventShuryoTimeH'] = $article->to_hour;
            $data['netEventShuryoTimeM'] = sprintf('%02d', $article->to_minute - ($article->to_minute % 15));
        }

        //イベント備考
        $data['eventInfo'] = Str::limit($article->event_comment, 750);

        //優先①
        //優先①
        //優先②から順に
        //優先②から順に
        //優先②から順に
        //マンション建物写真以降
        //マンション建物写真以降
        //マンション建物写真以降
        //周辺情報①
        //周辺情報①
        //周辺情報①
        //周辺情報①

        return array_filter($data, function ($value) {
            return !empty($value) || is_numeric($value);
        });
    }

    public static function limit($str, $length)
    {
        $result = Str::limit($str, $length, '');

        return $result;
    }

    //管理形態変換
    public static function setManagementForm($managementForm = null)
    {
        switch ($managementForm) {
            case 1:
            case 2:
            case 3:
            case 4:
            case 6:
            case 7:
            case 8:
            case 9:
                return $managementForm;
            case 10:
            case 11:
            case 12:
            case 13:
            case 14:
            case 15:
            case 16:
                return self::KANRIKEITAI_CONVERT_ARR[$managementForm];
            case 5:
                return 'f';//自主管理(勤務形態未定)
            default:
                return 1;
        }
    }
}
