<?php

namespace App\Console\Commands\Converters;

use App\Models\MstCity;
use App\Models\MstPrefecture;
use App\Models\MstTown;
use App\Models\RelationVendorArticle;
use App\Models\RelationLawrestriction;
use App\Models\RelationOtherrestriction;
use App\Models\RelationSpring;
use App\Models\UserInfo;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;

class SuumoLandConverter
{
    public static function convert($article)
    {
        $data = [];

        //１．基本情報
        //物件名
        $data['bukkenNm1'] = mb_substr($article->name_portal, 0, 42);

        //物件所在地
        $zipParts = explode('-', $article->zip);
        $data['yubinbango01'] = self::limit(Arr::get($zipParts, 0), 3);
        $data['yubinbango02'] = self::limit(Arr::get($zipParts, 1), 4);

        $data['todofukenCd'] = $article->address1;
        $data['shikugunCd'] = $article->address2;
        $data['ooazaCd'] = $article->address3;
        $data['azaCd'] = '000';

        $data["gaikuGotoNm"] = optional($article->lot)->name;

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

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

        //住所末尾
        $data['jushoMatsubi'] = self::limit($article->address4, 50);

        if(strpos($article->address4, '丁目')){
            $data['jushoMatsubi'] = Str::substr($article->address4, 3);
            $data['azaCd'] = '00'.Str::substr($article->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);
                }*/
            }
        }

        //fixed
        $data['todofukenCd'] = '14';
        $data['shikugunCd'] = '401';
        $data['ooazaCd'] = '001';
        //$data['azaCd'] = '001';
        $data['todofukenNm'] = '神奈川県';
        $data['shikugunNm'] = '愛甲郡愛川町';
        $data['ooazaNm'] = '春日台';
        $data['azaNm'] = 1;
        //$data['jushoMatsubi'] = 'テスト２';

        //周辺環境地図
        $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 ($article->main_traffic == 1 &&
            !empty($article->main_traffic_line) &&
            !empty($article->main_traffic_station) &&
            is_numeric($article->main_traffic_time)) {
            $data['ensenNm1'] = self::limit($article->main_traffic_line, 30);
            $data['ensenCd1'] = '0010';
            $data['ekiNm1'] = self::limit($article->main_traffic_station, 40);
            $data['ekiCd1'] = '07240';
            $data['kotsuKbn1'] = 1;
            $data['tohoJikan1'] = self::limit($article->main_traffic_time, 2);
        } elseif ($article->main_traffic == 2 &&
            !empty($article->main_traffic_bus_time) &&
            !empty($article->main_traffic_bus) &&
            is_numeric($article->main_traffic_bus_walk)) {
            $data['ensenNm1'] = self::limit($article->main_traffic_line, 30);
            $data['ekiNm1'] = self::limit($article->main_traffic_station, 40);
            $data['kotsuKbn1'] = 2;
            $data['tohoJikan1'] = self::limit($article->main_traffic_bus_walk, 2);
            $data['ensenCd1'] = '0010';
            $data['ekiCd1'] = '07240';
            $data['busJikan1'] = self::limit($article->main_traffic_bus_time, 2);
            $data['busTei1'] = self::limit($article->main_traffic_bus, 40);
            $data['teihoJikan1'] = self::limit($article->main_traffic_bus_walk, 2);
        }

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

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

        //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);

        //町会費など
        $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;
                }
            }
        }

        //温泉
        $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) {
            $springPresence = $article->spring_presence ?? '';
            $data['onsenKenRyoUmu'] = Arr::get($SPRING_PRESENCE_OPTIONS, $springPresence);

            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('company_id', $article->company_id)
                ->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($article->land_right != 0) {
            $data['shikichiKenri'] = $article->land_right;
        } else {
            $data['shikichiKenri'] = '1';
        }

        if ($article->shikichiKenri != 0 && $article->shikichiKenri != 1) {
            $data['shakuchikenShosaiKbn'] = $article->leasehold_kind;
            $data['chidaiKbn'] = $article->land_rent == 0 ? "1" : "4";
            $data['chidaiMin'] = self::limit($article->land_rent_val, 8);
            $data['chidaiTaniKbn'] = $article->land_rent_unit;
            $data['shakuchiKikanKbn'] = $article->leasehold_period;
            $data['shakuchiKikanNen'] = self::limit($article->leasehold_period_year, 3);
            $data['shakuchiKikanTsuki'] = self::limit($article->leasehold_period_month, 2);
            $data['kenrikinUmu'] = $article->right_cost;
            $data['kenrikinMin'] = self::limit($article->right_cost_val, 6);
            $data['hoshokinUmu'] = $article->deposit_cost;
            $data['hoshokinShikikinMin'] = self::limit($article->deposit_cost_val, 9);
            $data['shikikinUmu'] = $article->security_deposit_cost;
            $data['shikikinMin'] = self::limit($article->security_deposit_cost_val, 9);
            $data['tisSonotaKeiyakuJoko'] = self::limit($article->other_leasehold, 2000);

            if (
                $article->leasehold_kind == 3 ||
                $article->leasehold_kind == 4 ||
                $article->leasehold_kind == 7 ||
                $article->leasehold_kind == 8
            ) {
                if ($article->regular_leased_registration == 2) {
                    $data['tisSetteiToki'] = 3;
                } else if ($article->regular_leased_registration == 3) {
                    $data['tisSetteiToki'] = 2;
                } else {
                    $data['tisSetteiToki'] = $article->regular_leased_registration;
                }

                $data['tisChinryoKaiteijikiKbn'] = $article->regular_leased_season;
                $data['tisChinryoKaiteijiki'] = $article->regular_leased_season_nen;
                $data['tisChinryoKaiteigakuKbn'] = $article->regular_leased_cost;
                $data['tisJttKahiKbn'] = $article->regular_leased_transfer;
                if ($article->tisJttKahiKbn == 1) {
                    $data['tisJttShodakuYohiKbn'] = $article->regular_leased_transfer_method;
                    $data['tisJttShodakuryoKbn'] = $article->regular_leased_transfer_necessity;
                    $data['tisJttShodakunushiKbn'] = $article->regular_leased_transfer_consent;
                }
            }
        }

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

        //土地面積
        $data['tochiMensekiKbn'] = $article->land_area;

        $landAreaParts = explode('.', $article->land_area_val);
        $data['tochiMensekiMinS'] = self::limit(Arr::get($landAreaParts, 0), 6);
        $data['tochiMensekiMinL'] = self::limit(Arr::get($landAreaParts, 1), 2);

        //土地面積（傾斜部）
        if($article->land_condition1 == 1) {
            $landConditionArea1Parts = explode('.', $article->land_condition_area1);
            $data['keishaMensekiMinS'] = self::limit(Arr::get($landConditionArea1Parts, 0), 4);
            $data['keishaMensekiMinL'] = self::limit(Arr::get($landConditionArea1Parts, 1), 2);

            $data['keishaMensekiMinTaniKbn'] = $article->land_condition_unit1;
        }

        //土地面積（路地状部）
        if($article->land_condition2 == 2) {
            $landConditionArea2Parts = explode('.', $article->land_condition_area2);
            $data['shikichiEnchoMinS'] = self::limit(Arr::get($landConditionArea2Parts, 0), 3);
            $data['shikichiEnchoMinL'] = self::limit(Arr::get($landConditionArea2Parts, 1), 2);

            $data['shikichiEnchoMinTaniKbn'] = $article->land_condition_unit2;
        }

        //土地面積（高圧線下）
        if($article->land_condition3 == 3) {
            $landConditionArea3Parts = explode('.', $article->land_condition_area3);
            $data['koatsuMensekiMinS'] = self::limit(Arr::get($landConditionArea3Parts, 0), 4);
            $data['koatsuMensekiMinL'] = self::limit(Arr::get($landConditionArea3Parts, 1), 2);
        }

        //土地状況
        if(in_array($article->current_status, [1, 2])) {
            $data['tochiJokyoKbn'] = $article->current_status;
        } elseif($article->current_status == 3) {
            $data['tochiJokyoKbn'] = 4;
            $data['zoseiKanryoYoteiNen'] = self::limit($article->comp_year, 4);
            $data['zoseiKanryoYoteiTsuki'] = self::limit($article->comp_month, 2);
        } elseif ($article->current_status == 0) {
            $data['tochiJokyoKbn'] = "";
        } else {
            $data['tochiJokyoKbn'] = 3;
        }

        //引渡し
        if($article->land_delivery == 1) {
            $data['nyukyoJikiKbn'] = 1;
        } elseif($article->land_delivery == 2) {
            $data['nyukyoJikiKbn'] = 4;
        } elseif($article->land_delivery == 3) {
            $data['nyukyoJikiKbn'] = '2';
            $data['nyukyoJikiNen'] = self::limit($article->delivery_year, 4);
            $data['nyukyoJikiTsuki'] = self::limit($article->delivery_month, 2);
            $data['nyukyoJikiJunKbn'] = $article->land_delivery_time;
        }

        //建築条件
        if($article->land_condition == 0) {
            $data['kenchikuJokenUmuKbn'] = 0;
        } elseif($article->land_condition == 1) {
            $data['kenchikuJokenUmuKbn'] = 1;
            $data['tatemonoKakaku'] = $article->building_plan_place;

            $buildingPlanPlaceParts = explode('.', $article->building_plan_area);
            $data['tatemonoMensekiS'] = self::limit(Arr::get($buildingPlanPlaceParts, 0), 4);
            $data['tatemonoMensekiL'] = self::limit(Arr::get($buildingPlanPlaceParts, 1), 2);
        } else {
            $data['kenchikuJokenUmuKbn'] = '';
        }

        //地目
        if($article->ground != 0 && $article->ground < 7) {
            $data['chimokuKbn'] = $article->ground;
        } elseif($article->ground == 7) {
            $data['chimokuKbn'] = 9;
            $data['chimokuSntComment'] = self::limit($article->ground_text, 200);
        } else {
            $data['chimokuKbn'] = "";
            $data['chimokuSntComment'] = "";
        }

        //建ぺい率
        if(is_numeric($article->building_rate)) {
            $buildingRate = (int)$article->building_rate;
            $data['kenpeiritsu'] = $buildingRate < 999 ? $buildingRate : 999;
        } else {
            $data['kenpeiritsu'] = 0;
        }

        //容積率
        if(is_numeric($article->volume_rate)) {
            $volumeRate = (int)$article->volume_rate;
            $data['yosekiritsu'] = $volumeRate > 999 ? 999 : $volumeRate;
        } else {
            $data['yosekiritsu'] = 0;
        }

        //私道負担
        //私道面積
        //私道持分比率
        if($article->road_burden == 0) {
            $data['shidoFutanKbn'] = 1;
        } elseif($article->road_burden == 1) {
            $data['shidoFutanKbn'] = 2;

            $roadBurdenAreaParts = explode('.', $article->road_burden_area);
            $data['shidoFutanMensekiMinS1'] = self::limit(Arr::get($roadBurdenAreaParts, 0), 4);
            $data['shidoFutanMensekiMinL1'] = self::limit(Arr::get($roadBurdenAreaParts, 1), 2);

        } elseif($article->road_burden == 2) {
            $data['shidoFutanKbn'] = 3;

            $roadBurdenAreaParts = explode('.', $article->road_burden_area);
            $data['shidoFutanMensekiMinS2'] = self::limit(Arr::get($roadBurdenAreaParts, 0), 4);
            $data['shidoFutanMensekiMinL2'] = self::limit(Arr::get($roadBurdenAreaParts, 1), 2);

            $roadNumeratorParts = explode('.', $article->road_numerator);
            $data['shidoFutanBunshiMinS'] = self::limit(Arr::get($roadNumeratorParts, 0),6);
            $data['shidoFutanBunshiMinL'] = self::limit(Arr::get($roadNumeratorParts, 1), 2);

            $roadDenominatorParts = explode('.', $article->road_denominator);
            $data['shidoFutanBunboMinS'] = self::limit(Arr::get($roadDenominatorParts, 0), 9);
            $data['shidoFutanBunboMinL'] = self::limit(Arr::get($roadDenominatorParts, 1), 2);
        } else {
            $data["shidoFutanKbn"] = 0;
        }

        //地役権
        if(in_array($article->easement, [0, 1])) {
            $data['chiekikenKbn'] = $article->easement;
        } else {
            $data['chiekikenKbn'] = $article->easement;

            $easementAreaParts = explode('.', $article->easement_area);
            $data['chiekikenMensekiS'] = self::limit(Arr::get($easementAreaParts, 0), 4);
            $data['chiekikenMensekiL'] = self::limit(Arr::get($easementAreaParts, 1), 2);
        }

        //前面道路１
        $LAND_DIRECTION_OPTIONS = [
            0 => 0, 1 => 4, 2 => 5, 3 => 1, 4 => 6,
            5 => 3, 6 => 8, 7 => 2, 8 => 7
        ];

        $landDirection1 = $article->land_direction1 ?? '';
        $data['doroMukiKbn1'] = $LAND_DIRECTION_OPTIONS[$landDirection1] ?? "";

        if($article->land_direction1 != 0) {
            $roadWidth1Parts = explode('.', $article->road_width1);
            $data['doroWidth1S'] = self::limit(Arr::get($roadWidth1Parts, 0), 2);
            $data['doroWidth1L'] = self::limit(Arr::get($roadWidth1Parts, 1), 1);

            $frontage1Parts = explode('.', $article->frontage1);
            $data['setsudoWidth1S'] = self::limit(Arr::get($frontage1Parts, 0), 2);
            $data['setsudoWidth1L'] = self::limit(Arr::get($frontage1Parts, 1), 1);
        }

        //前面道路２
        $landDirection2 = $article->land_direction2 ?? '';
        $data['doroMukiKbn2'] = Arr::get($LAND_DIRECTION_OPTIONS, $landDirection2);

        if($article->land_direction2 != 0) {
            $roadWidth2Parts = explode('.', $article->road_width2);
            $data['doroWidth2S'] = self::limit(Arr::get($roadWidth2Parts, 0), 2);
            $data['doroWidth2L'] = self::limit(Arr::get($roadWidth2Parts, 1), 1);

            $frontage2Parts = explode('.', $article->frontage2);
            $data['setsudoWidth2S'] = self::limit(Arr::get($frontage2Parts, 0), 2);
            $data['setsudoWidth2L'] = self::limit(Arr::get($frontage2Parts, 1), 1);
        }

        //前面道路３
        $landDirection3 = $article->land_direction3 ?? '';
        $data['doroMukiKbn3'] = Arr::get($LAND_DIRECTION_OPTIONS, $landDirection3);

        if($article->land_direction3 != 0) {
            $roadWidth3Parts = explode('.', $article->road_width3);
            $data['doroWidth3S'] = empty(self::limit(Arr::get($roadWidth3Parts, 0), 2)) ? "1" : self::limit(Arr::get($roadWidth3Parts, 0), 2);
            $data['doroWidth3L'] = empty(self::limit(Arr::get($roadWidth3Parts, 1), 1)) ? "1" : self::limit(Arr::get($roadWidth3Parts, 1), 1);

            $frontage3Parts = explode('.', $article->frontage3);
            $data['setsudoWidth3S'] = empty(self::limit(Arr::get($frontage3Parts, 0), 2)) ? "1" : self::limit(Arr::get($frontage3Parts, 0), 2);
            $data['setsudoWidth3L'] = empty(self::limit(Arr::get($frontage3Parts, 1), 1)) ? "1" : self::limit(Arr::get($frontage3Parts, 1), 1);
        }

        //上水道
        $data['setsubiJosuidoKbn'] = $article->water_supply;

        //下水道
        $data['setsubiGesuidoKbn'] = $article->sewerage;

        //ガス・オール電化
        $data['setsubiGasKbn'] = $article->gas;

        //車庫
        if($article->garage == 1) {
            $data['shakoKbn'] = 2;
        } elseif($article->garage == 0) {
            $data['shakoKbn'] = 0;
        }

        $data["soKosu"] = $article->section;

        //セットバック
        //セットバック（面積）
        if($article->set == 1) {
            $data['setbackKbn'] = $article->set;
        } elseif($article->set == 2 || $article->set == 3) {
            $data['setbackKbn'] = $article->set;

            $setAreaParts = explode('.', $article->set_area);
            $data['setbackMensekiMinS'] = self::limit(Arr::get($setAreaParts, 0), 2);
            $data['setbackMensekiMinL'] = self::limit(Arr::get($setAreaParts, 1), 1);
        } else {
            $data['setbackKbn'] = "";
        }

        //用途地域
        $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', 99 => "13"
        ];

        $useArea = $article->use_area ?? '';
        $data['yotochiikiCd01'] = Arr::get($USE_AREA_OPTIONS, $useArea, '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', 99 => "13"
        ];

        $data['yotochiikiCd02'] = '00';
        $landArea = $article->land_use ?? '';
        $data['yotochiikiCd02'] = Arr::get($LAND_AREA_OPTIONS, $landArea, '00');

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

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

        $companyManner = $article->company_manner ?? '';
        $data['torihikitaiyoKbn01'] = Arr::get($COMPANY_MANNER_OPTIONS, $companyManner, '01');

        if($data['torihikitaiyoKbn01'] == 12){
            $vendor = RelationVendorArticle::getVendorDataByRainsNo($article->building_id)->first();
            if($vendor->vendor_tel1 !=''){
                $tel = explode('-', $vendor->vendor_tel1);
                $data['motoGyoshaTelShigai'] = $tel[0];
                $data['motoGyoshaTelShinai'] = $tel[1];
                $data['motoGyoshaTelNo'] = $tel[2];
            }
            $data['motoGyoshaNm'] = $vendor->name;
            $data['motoGyoshaTantoNm'] = $vendor->charge;

        }

        //６．制限事項
        //法令上の制限
        $lawRestrictions = RelationLawrestriction::where('company_id', $article->company_id)
            ->where('article_id', $article->building_id)
            ->pluck('item_id');

        $LAW_RESTRICTION_NAMES = [
            1 => 'hriSgnHoBunkazai', 2 => 'hriSgnHoKotohogo', 3 => 'hriSgnHoKeikan', 4 => 'hriSgnHoMisshuSgcSeibi', 5 => 'hriSgnHoKoku',
            6 => 'hriSgnHoKasen', 7 => 'hriSgnHoSabo', 8 => 'hriSgnHoNochi', 9 => 'hriSgnHoAnzenJorei', 10 => 'hriSgnChiTakuzokisei',
            11 => 'hriSgnChiKyukeishachi', 12 => 'hriSgnChiKodochiku', 13 => 'hriSgnChiKodoriyo', 14 => 'hriSgnChiChukosoJutaku', 15 => 'hriSgnChiKosojutakuYudo',
            16 => 'hriSgnChiBoka', 17 => 'hriSgnChiJunboka', 18 => 'hriSgnChiFuchi', 19 => 'hriSgnChiKeikan', 20 => 'hriSgnChiJunKeikan',
            21 => 'hriSgnChiKanko', 22 => 'hriSgnChiRekishi', 23 => 'hriSgnChiDento', 24 => 'hriSgnChiTokuteiGaiku', 25 => 'hriSgnChiTokubetsuYoto',
            26 => 'hriSgnChiBunkyo', 27 => 'hriSgnChiToshisaisei', 28 => 'hriSgnChiTokubetsuRyokuchi', 29 => 'hriSgnTateTakasaMax', 30 => 'hriSgnTateTakasaMin',
            31 => 'hriSgnTateKenpeiMin', 32 => 'hriSgnTateYosekiMin', 33 => 'hriSgnTateSktMnsMax', 34 => 'hriSgnTateSktMnsMin', 35 => 'hriSgnTateMnsMax',
            36 => 'hriSgnTateMnsMin'
        ];

        foreach ($lawRestrictions as $lawRestriction) {
            if(Arr::has($LAW_RESTRICTION_NAMES, $lawRestriction)) {
                $lawRestrictionName = $LAW_RESTRICTION_NAMES[$lawRestriction];
                $data[$lawRestrictionName] = 1;
            }
        }

        $otherRestrictions = RelationOtherrestriction::where('company_id', $article->company_id)
            ->where('article_id', $article->building_id)
            ->pluck('item_id');

        $OTHER_RESTRICTION_NAMES = [
            1 => 'sgnJikoToshikeikakudoro', 2 => 'sgnJikoKyoteidoro', 3 => 'sgnJikoHikage', 4 => 'sgnJikoSumikiri', 5 => 'sgnJikoSetsudoDansa',
            6 => 'sgnJikoDansa', 7 => 'sgnJikoHekimenKotai', 8 => 'sgnJikoKenchikuKyotei', 9 => 'sgnJikoGakeue', 10 => 'sgnJikoGakeshita',
            11 => 'sgnJikoFuseikeichi'
        ];

        foreach ($otherRestrictions as $otherRestriction) {
            if(Arr::has($OTHER_RESTRICTION_NAMES, $otherRestriction)) {
                $otherRestrictionName = $OTHER_RESTRICTION_NAMES[$otherRestriction];
                $data[$otherRestrictionName] = 1;
            }
        }

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


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

        $data['jigKbn'] = '';
        $data['jigComment'] = '';

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

            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);
            }
        }

        //売買区分


        //９．キャッチ項目
        //メインキャッチ
        $data["shakuchikenWariaiMin"] = $article->leasehold_rate;

        //サブキャッチ

        $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);

        //１０．イベント情報
        //共通
        // 10.イベント情報
        $dataEventCategory = [
            1 => 1,
            2 => 2,
            3 => 3,
            4 => 4,
            5 => 6,
            0 => 0
        ];

        $data['eventInfoKbn'] = $dataEventCategory[$article->event_category] ?? "";//タイトル

        $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));
        }

        //ネット（時間）
        $MINUTE_OPTIONS = [
            0 => "00", 10 => "15", 20 => "30", 30 => "30", 40 => "45", 50 => "45"
        ];

        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'] = Arr::get($MINUTE_OPTIONS, $article->from_minute ?? '');
            $data['netEventShuryoTimeH'] = $article->to_hour;
            $data['netEventShuryoTimeM'] = Arr::get($MINUTE_OPTIONS, $article->to_minute ?? '');
        }

        //イベント備考
        $data['eventInfo'] = self::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;
    }
}
