<?php

namespace App\Console\Commands\Converters;

use App\Models\MstManagementForm;
use App\Models\MstPrefecture;
use App\Models\MstCity;
use App\Models\MstSchool;
use App\Models\MstStructure;
use App\Models\MstTown;
use App\Models\MstPropertyType;
use App\Models\MstUseArea;
use App\Models\RelationCustomContent;
use App\Models\RelationPriceHistory;

class SaiKyotoArticleConverter
{
    protected static $gas = [
        ['code' => 1, 'name' => '都市ガス'],
        ['code' => 2, 'name' => '集中ＬＰＧ'],
        ['code' => 3, 'name' => '個別ＬＰＧ'],
        ['code' => 4, 'name' => 'オール電化'],
        ['code' => 0, 'name' => '未選択'],
    ];

    protected static $sewerage = [
        ['code' => 1, 'name' => '本下水'],
        ['code' => 2, 'name' => '集中浄化槽'],
        ['code' => 3, 'name' => '個別浄化槽'],
        ['code' => 0, 'name' => '未選択'],
    ];

    protected static $water_supply = [
        ['code' => 1, 'name' => '公営水道'],
        ['code' => 2, 'name' => '私設水道'],
        ['code' => 3, 'name' => '井戸'],
        ['code' => 0, 'name' => '未選択'],
    ];

    /**
     * Convert data for save to mansion table for use saikyoto
     *
     * @param array $data
     * @param array $masterData
     * @param null $room
     * @return array
     */
    public static function convert($data, $masterData, $room = null): array
    {
        if (!is_null($room)) {
            self::mergeDataWithRoom($data, $room);
        }
        $property = $data["property"] ?? "";
        $mansionProperty = [6, 7];
        if (!in_array($property, $mansionProperty)) {
            $data["management_form"] = null;
        }

        $dataForSaiKyoto = [];
        $dataForSaiKyoto['OG'] = $data['name'] . " " . ($data["name_gouchi"] ?? "");
        $dataForSaiKyoto['bunrui'] = static::getBunrui(static::findElementByKeyValue(MstPropertyType::getData($data['property']), 'code', $data['property'], 'name'));
        // $dataForSaiKyoto['NU'] = isset($data['address1']) ? MstPrefecture::getName($data['address1'])['name'] : "";
        $dataForSaiKyoto['NU'] = isset($data['address2']) ? MstCity::getName($data['address1'], $data['address2'])['name'] : "";
        $dataForSaiKyoto['NT'] = isset($data['address3']) ? MstTown::getName($data['address1'], $data['address2'], $data['address3'])['name'] : "";
        $dataForSaiKyoto['NS'] = $data['address4'] ?? ""; // 22
        $dataForSaiKyoto['NH'] = $data['lat'] ?? "";
        $dataForSaiKyoto['NG'] = $data['lng'] ?? ""; // 24
        $dataForSaiKyoto['NE'] = isset($data["primary_school_school"]) ? optional(MstSchool::where("code", $data["primary_school_school"])->first())->name : "";
        $dataForSaiKyoto['JD'] = ($data["floor_plan"] ?? "") . self::getFloorType($data["floor_plan_type"] ?? "");
        $dataForSaiKyoto['ND'] = isset($data["secondary_school_school"]) ? optional(MstSchool::where("code", $data["secondary_school_school"])->first())->name : ""; // bbb
        $dataForSaiKyoto['LO'] = $data['main_traffic_time'];
        $dataForSaiKyoto['LC'] = ($data['main_traffic_line'] == 'JR東海道・山陽本線') ? 'ＪＲ東海道・山陽本線' . $data['main_traffic_station'] : $data['main_traffic_line'] . $data['main_traffic_station'];
        $dataForSaiKyoto['LN'] = $data['sub_traffic1_time'];
        $dataForSaiKyoto['LB'] = ($data['sub_traffic1_line'] == 'JR東海道・山陽本線') ? 'ＪＲ東海道・山陽本線' . $data['sub_traffic1_station'] : $data['sub_traffic1_line'] . $data['sub_traffic1_station'];
        $dataForSaiKyoto['LM'] = $data['sub_traffic2_time'];
        $dataForSaiKyoto['LA'] = ($data['sub_traffic2_line'] == 'JR東海道・山陽本線') ? 'ＪＲ東海道・山陽本線' . $data['sub_traffic2_station'] : $data['sub_traffic2_line'] . $data['sub_traffic2_station'];
        $dataForSaiKyoto['LL'] = $data['sub_traffic3_time'];
        $dataForSaiKyoto['KZ'] = ($data['sub_traffic3_line'] == 'JR東海道・山陽本線') ? 'ＪＲ東海道・山陽本線' . $data['sub_traffic3_station'] : $data['sub_traffic3_line'] . $data['sub_traffic3_station'];
        $dataForSaiKyoto['LK'] = $data['sub_traffic4_time'];
        $dataForSaiKyoto['KY'] = ($data['sub_traffic4_line'] == 'JR東海道・山陽本線') ? 'ＪＲ東海道・山陽本線' . $data['sub_traffic4_station'] : $data['sub_traffic4_line'] . $data['sub_traffic4_station'];
        $dataForSaiKyoto['LJ'] = $data['sub_traffic5_time'];
        $dataForSaiKyoto['KX'] = ($data['sub_traffic5_line'] == 'JR東海道・山陽本線') ? 'ＪＲ東海道・山陽本線' . $data['sub_traffic5_station'] : $data['sub_traffic5_line'] . $data['sub_traffic5_station'];

        self::prettyTraffic($data);

        if ($data['main_traffic'] == 1) {
            if (empty($data['main_traffic_time']))
                $dataForSaiKyoto['KW'] = "";
            else
                $dataForSaiKyoto['KW'] = $data['main_traffic_line'] . $data['main_traffic_station'] . 'から徒歩' . $data['main_traffic_time'] . '分';
        } elseif ($data['main_traffic'] == 2) {
            $dataForSaiKyoto['LO'] = "";
            if (empty($data['main_traffic_bus_time']))
                $dataForSaiKyoto['KW'] = "";
            else
                $dataForSaiKyoto['KW'] = $data['main_traffic_line'] . $data['main_traffic_station'] . 'からバス' . $data['main_traffic_bus_time'] . '分' . $data['main_traffic_bus'] . '停歩' . $data['main_traffic_bus_walk'] . '分';
        }

        if ($data['sub_traffic1'] == 2) {
            $dataForSaiKyoto['LN'] = "";
        }
        $dataForSaiKyoto['KV'] = self::getLine($data, 1);

        if ($data['sub_traffic2'] == 2) {
            $dataForSaiKyoto['LM'] = "";
        }
        $dataForSaiKyoto['KU'] = self::getLine($data, 2);

        if ($data['sub_traffic3'] == 2) {
            $dataForSaiKyoto['LL'] = "";
        }
        $dataForSaiKyoto['KT'] = self::getLine($data, 3);

        if ($data['sub_traffic4'] == 2) {
            $dataForSaiKyoto['LK'] = "";
        }
        $dataForSaiKyoto['KS'] = self::getLine($data, 4);

        if ($data['sub_traffic5'] == 2) {
            $dataForSaiKyoto['LJ'] = "";
        }
        $dataForSaiKyoto['KR'] = self::getLine($data, 5);

        $dataForSaiKyoto['NF'] = $data['place_area'] ?? "";

        $dataForSaiKyoto['JW'] = self::getLandRight($data, $masterData, $room);

        $dataForSaiKyoto['KM'] = self::getKMData($data["use_area"] ?? "");
        $dataForSaiKyoto['KN'] = self::getKMData($data["land_use"] ?? "");
        $dataForSaiKyoto['area'] = self::getValueArea($data["place_area"] ?? "");
        $cityPlan = isset($data['city_plan']) ? static::findElementByKeyValue($masterData['city_plan'], 'code', $data['city_plan'], 'name') : "";
        $dataForSaiKyoto['KF'] = $cityPlan;

        $dataForSaiKyoto["KH"] = self::getKHData($data);

        $dataForSaiKyoto['HT'] = $data['total_unit'] ?? "";
        $construction = isset($data['construction']) ? static::findElementByKeyValue(MstStructure::getData($data['construction']), 'code', $data['construction'], 'name') : "";
        if (empty($property)) {
            $dataFloor = $data['whereabouts'] ?? "";
        } else {
            $dataFloor = $data['floor'] ?? "";
        }

        $dataForSaiKyoto['IO'] = "{$construction}{$dataFloor}階建て";

        $dataForSaiKyoto['JA'] = $data['whereabouts'] ?? "";

        if (isset($data['age_month']) && strlen($data['age_month']) == 1) {
            $data["age_month"] = " {$data["age_month"]}";
        }
        $dataForSaiKyoto['II'] = (isset($data['age_year']) && $data['age_month']) ? ($data['age_year'] . "/" . $data['age_month']) : "";
        $dataForSaiKyoto['HL'] = $data['land_area_val'] ?? "";
        $dataForSaiKyoto['GP'] = static::getGDData($data["management_form"] ?? "");
        $dataForSaiKyoto['HK'] = isset($data['land_area_val']) ? static::roundFl($data['land_area_val'] * 0.3025) : "";
        $gas = isset($data['gas']) ? static::findElementByKeyValue(static::$gas, 'code', $data['gas'], 'name') : '';
        if($data['gas'] == 0) {
            $dataForSaiKyoto['GJ'] = '-';
        } else {
            $dataForSaiKyoto['GJ'] = $gas ?? "";
        }
        $dataForSaiKyoto['BG'] = $data["management_company"] ?? "";
        $dataForSaiKyoto['hosoku2'] = $data["comment"] ?? "";
        $dataForSaiKyoto['hosoku1'] = $data["point"] ?? "";
         if(!isset($data['point']) && $data['property'] == 6){
            $dataForSaiKyoto['hosoku1'] = $data["memo2"] ?? "";
        }
        $dataForSaiKyoto['AU'] = $data["price"] ?? "";
        $sewerage = isset($data['sewerage']) ? static::findElementByKeyValue(static::$sewerage, 'code', $data['sewerage'], 'name') : "";
        if(isset($data['sewerage']) && $data['sewerage'] == 0) {
            $dataForSaiKyoto['GK'] = '-';
        } else {
            $dataForSaiKyoto['GK'] = $sewerage;
        }
        $water_supply = isset($data['water_supply']) ? static::findElementByKeyValue(static::$water_supply, 'code', $data['water_supply'], 'name') : "";
        if(isset($data['water_supply']) && $data['water_supply'] == 0) {
            $dataForSaiKyoto['GL'] = '-';
        } else {
            $dataForSaiKyoto['GL'] = $water_supply;
        }

        $dataForSaiKyoto['GN'] = self::getCompanyManager($data["company_manner"] ?? "");
        $dataForSaiKyoto['GX'] = isset($data['total_area_val']) ? static::roundFl($data['total_area_val'] * 0.3025) : "";
        $dataForSaiKyoto['GY'] = self::getTotalAreaVal($data);
        $dataForSaiKyoto['HG'] = isset($data['total_area_val']) ? static::roundFl($data['total_area_val'] * 0.3025) : "";
        $dataForSaiKyoto['HH'] = $data["total_area_val"] ?? "";
        $dataForSaiKyoto['IJ'] = $data["architecture_no"] ?? "";
        $dataForSaiKyoto['IJ'] = $data["architecture_no"] ?? "";
        $dataForSaiKyoto['IK'] = (($data['property_sub'] ?? 0) == 2) ? "中古" : "新築";;
        $dataForSaiKyoto['HM'] = self::getTotalArea($data);
        $dataForSaiKyoto['IZ'] = self::getBalconyDirection($data["balcony_direction"] ?? "");
        $dataForSaiKyoto['HE'] = isset($data["balcony_area_val"]) ? (empty($data["balcony_area_val"]) ? "空欄" : $data["balcony_area_val"]) : "空欄";
        $dataForSaiKyoto['GO'] = static::getGOData($data["management_form"] ?? "");
        $dataForSaiKyoto['GP'] = static::getGPData($data["management_form"] ?? "");
        $dataForSaiKyoto['JJ'] = self::getLand($data, 3);
        $dataForSaiKyoto['JK'] = self::getLand($data, 2);
        $dataForSaiKyoto['JL'] = self::getLand($data, 1);
        $dataForSaiKyoto['JY'] = self::getRoadBurdenArea($data);
        $dataForSaiKyoto['KA'] = self::getRoadBurnden($data["road_burden"] ?? "");
        if($data['property']==1 || $data['property']==2 || $data['property']==3){
            $dataForSaiKyoto['KB'] = self::getLandConditionLand($data["land_condition"] ?? "");
        }else{
            $dataForSaiKyoto['KB'] = self::getLandCondition($data["land_condition1"] ?? "");
        }
        $dataForSaiKyoto['KD'] = self::getKokudoho($data["kokudoho"] ?? "");
        if(isset($data["terrain"]) && $data["terrain"] == 9 && $data['terrain_text']!=''){
            $dataForSaiKyoto['KE'] = $data['terrain_text'];
        }else{
            $dataForSaiKyoto['KE'] = self::getTerrain($data["terrain"] ?? "");
        }

        $dataForSaiKyoto['KJ'] = self::getSection($data);
        $dataForSaiKyoto['KK'] = $data["volume_rate"] ?? "";
        $dataForSaiKyoto['KL'] = $data["building_rate"] ?? "";
        $dataForSaiKyoto['KO'] = in_array($data["property"] ?? 0, [1, 2, 3]) ? self::getKOData($data["ground"] ?? "") : "宅地";
        $dataForSaiKyoto['MH'] = self::getMember($data["members"] ?? "");
        $dataForSaiKyoto['MK'] = $data["repair_cost"] ?? "";
        $dataForSaiKyoto['ML'] = $data["management_cost"] ?? "";
        $dataForSaiKyoto['NB'] = $data["move_in_conditions"] ?? "";
        $dataForSaiKyoto['NX'] = self::getCurrentStatus($data["current_status"] ?? "");
        $dataForSaiKyoto['OC'] = self::getStatus($data["status"] ?? "");
        $dataForSaiKyoto['OD'] = self::getODData($data["company_manner"] ?? "");
        $dataForSaiKyoto['OE'] = $data["room_num"] ?? "";
        $dataForSaiKyoto['IE'] = self::getIEData($data);
        $dataForSaiKyoto['IF'] = self::getIEData($data, false);
        $dataForSaiKyoto['IG'] = self::getIEData($data, true);
        $dataForSaiKyoto['II'] = self::getIIData($data);
        $dataForSaiKyoto['IX'] = self::getParkingData($data);
        $dataForSaiKyoto['NC'] = self::getNCData($data);
        $dataForSaiKyoto['IS'] = self::getCustomField($data, 6);
        $dataForSaiKyoto['seko'] = $data["construction_company"] ?? "";
        $dataForSaiKyoto['F'] = self::getCustomField($data, 4);
        $dataForSaiKyoto['G'] = empty(self::mb_trim($dataForSaiKyoto['F'])) ? "" : "有";
        $dataForSaiKyoto['C'] = self::getCustomField($data, 5);
        $dataForSaiKyoto['D'] = empty(self::mb_trim($dataForSaiKyoto['C'])) ? "" : "有";
        $dataForSaiKyoto['A'] = self::getCustomField($data, 7);
        $dataForSaiKyoto['jsmin'] = $data["secondary_school_distance"] ?? "";
        $dataForSaiKyoto['esmin'] = $data["primary_school_distance"] ?? "";

        $property = $data["property"] ?? "";
        $landProperty = [1, 2, 3];
        if (in_array($property, $landProperty)) {
            $dataForSaiKyoto["IK"] = null;
            $dataForSaiKyoto["IO"] = null;
            $dataForSaiKyoto["JA"] = null;
            $dataForSaiKyoto["JD"] = null;
        }

        $houseProperty = [4,5];
        $isArticleHouse = in_array($property, $houseProperty);

        if ($isArticleHouse) {
            $dataForSaiKyoto["GO"] = null;
            $dataForSaiKyoto["HH"] = null;
        }
        return $dataForSaiKyoto;
    }

    /**
     * @param array $array
     * @param string|int $keySearch
     * @param string|int $value
     * @param string|int $keyGet
     * @return string|array
     */
    public static function findElementByKeyValue($array, $keySearch = "", $value, $keyGet = "")
    {
        $results = "";
        $key = array_search($value, array_column($array, $keySearch));
        if ($key !== false) {
            $results = $array[$key][$keyGet];
        }else{
            $results = 'マンション';
        }
        return $results;
    }

    private static function getBunrui($value)
    {
        if($value == '土地（借地権)' || $value == '土地（底地権)'){
            return '土地';
        }
        if($value == '戸建'){
            return '一戸建て';
        }

        /*if($value == 'テラスハウス'){
            return '一戸建て';
        }

        if(strpos($value, 'テラスハウス') !== false){
            return '一戸建て';
        }*/

        if($value == 'タウンハウス' || strpos($value, 'タウンハウス') !== false || strpos($value, 'マンション') !== false){
            return 'マンション';
        }

        return $value;
    }

    private static function getLandRight($article, $masterData, $room)
    {
        $landRight = isset($article['land_right']) ? static::findElementByKeyValue($masterData['land_right'], 'code', $article['land_right'], 'name') : "";
        if ($article['land_right'] == 0) {
            return "";
        }
        return $landRight;
    }

    private static function getKHData($article)
    {
        /*$landCondition = $article["land_condition"] ?? 0;
        if ($landCondition == 0) {
            return "無";
        }
        if ($landCondition == 1) {
            return "有";
        }
        if ($landCondition == 2) {
            return "";
        }*/

        return $article["other_comment"] ?? "";
    }

    private static function mergeDataWithRoom(&$data, $room)
    {
        $data["name"] = $room["name"];
        $data["room_num"] = $room["room_num"];
        $data["lat"] = $room["lat"];
        $data["lng"] = $room["lng"];
        $data["place_area"] = $room["place_area"];
        $data["comment"] = $room["comment"];
        $data["floor_plan"] = $room["floor_plan"];
        $data["floor_plan_type"] = $room["floor_plan_type"];
        $data["price"] = $room["price"];
        $data["point"] = $room["point"];
        $data["status"] = $room["status"];
        $data["company_manner"] = $room["company_manner"];
        $data["management_cost"] = $room["management_cost"];
        $data["repair_cost"] = $room["repair_cost"];
        $data["parking"] = $room["parking"];
        $data["total_area_val"] = $room["total_area_val"];
        $data["total_area"] = $room["total_area"];
        $data["balcony_area_val"] = $room["balcony_area_val"];
        $data["balcony_direction"] = $room["balcony_direction"];
        $data["current_status"] = $room["current_status"];
        $data["move_in_conditions"] = $room["move_in_conditions"];
        $data["move_in"] = $room["move_in"];
        $data["move_in_year"] = $room["move_in_year"];
        $data["move_in_month"] = $room["move_in_month"];
        $data["whereabouts"] = $room["whereabouts"];
        $data["members"] = $room["members"];
        $data["address4"] = $room["address4"] ?? "";
        $data["building_id"] = $room["building_id"] ?? "";
    }

    private static function getLine($data, $index)
    {
        $line = "";

        if ($data["sub_traffic{$index}"] == 1) {
            if (empty($data["sub_traffic{$index}_time"]))
                $line = "";
            else
                $line = $data["sub_traffic{$index}_line"] . $data["sub_traffic{$index}_station"] . 'から徒歩' . $data["sub_traffic{$index}_time"] . '分';
        } elseif ($data["sub_traffic{$index}"] == 2) {
            if (empty($data["sub_traffic{$index}_bus_time"]))
                $line = "";
            else
                $line = $data["sub_traffic{$index}_line"] . $data["sub_traffic{$index}_station"] .
                    'からバス' . $data["sub_traffic{$index}_bus_time"] . '分' . $data["sub_traffic{$index}_bus"] .
                    '停歩' . $data["sub_traffic{$index}_bus_walk"] . '分';
        }

        return $line;
    }

    private static function prettyTraffic(&$data)
    {
        $data['main_traffic_line'] = self::prettyTrafficLine($data['main_traffic_line']);
        $data['sub_traffic1_line'] = self::prettyTrafficLine($data['sub_traffic1_line']);
        $data['sub_traffic2_line'] = self::prettyTrafficLine($data['sub_traffic2_line']);
        $data['sub_traffic3_line'] = self::prettyTrafficLine($data['sub_traffic3_line']);
        $data['sub_traffic4_line'] = self::prettyTrafficLine($data['sub_traffic4_line']);
        $data['sub_traffic5_line'] = self::prettyTrafficLine($data['sub_traffic5_line']);
        $data['main_traffic_station'] = self::prettyTrafficStation($data['main_traffic_station']);
        $data['sub_traffic1_station'] = self::prettyTrafficStation($data['sub_traffic1_station']);
        $data['sub_traffic2_station'] = self::prettyTrafficStation($data['sub_traffic2_station']);
        $data['sub_traffic3_station'] = self::prettyTrafficStation($data['sub_traffic3_station']);
        $data['sub_traffic4_station'] = self::prettyTrafficStation($data['sub_traffic4_station']);
        $data['sub_traffic5_station'] = self::prettyTrafficStation($data['sub_traffic5_station']);
    }

    private static function prettyTrafficLine($value)
    {
        if (strpos($value, "線") === false) {
            return "{$value}線";
        }

        return $value;
    }

    private static function prettyTrafficStation($value)
    {
        if (strpos($value, "駅") === false) {
            return "{$value}駅";
        }

        return $value;
    }

    private static function getPlaceArea($value)
    {
        if ($value == "安朱（＋上野）") return "安朱";
        if ($value == "小山（＋髭茶屋＋八軒屋敷）") return "小山";
        if ($value == "藤尾（大津市）") return "藤尾";
        if ($value == "醍醐（＋小栗栖）") return "醍醐";

        return $value;
    }

    private static function getCompanyManager($value)
    {
        $managers = [
            1 => "売主",
            2 => "事業主・売主",
            3 => "一般媒介",
            4 => "専任媒介",
            5 => "専属専任媒介",
            6 => "代理販売",
            7 => "販売提携",
            //8 => "代理販売",
            9 => '仲介'
        ];

        return $managers[$value] ?? "";
    }

    private static function getTotalAreaVal($article)
    {
        $property = $article["property"] ?? "";
        $landProperty = [1,2,3];
        if (empty($property)) return "";
        if (in_array($property, $landProperty)) return "";

        return $article["total_area_val"] ?? "";
    }

    private static function getCustomField($article, $code)
    {
        $field = RelationCustomContent::where("article_id", $article["building_id"] ?? "")
            ->where("code", $code)
            ->first();

        return htmlspecialchars_decode(optional($field)->contents);
    }

    private static function mb_trim($str, $chars = '\s　') {
        $str = preg_replace("/^[$chars]+/u", '', $str);
        $str = preg_replace("/[$chars]+$/u", '', $str);
        return $str;
    }

    private static function getKokudoho($value)
    {
        $kokudoho = [
            1 => "届出要",
            2 => "届出不要",
            0 => "-",
        ];

        return $kokudoho[$value] ?? "";
    }

    private static function getTerrain($value)
    {
        $terrain = [
            1 => "平坦",
            2 => "高台",
            3 => "低地",
            4 => "ひな壇",
            5 => "傾斜地",
            9 => "その他",
            0 => "-",
        ];

        return $terrain[$value] ?? "";
    }

    private static function getKMData($value)
    {
        $kms = [
            1 => "第一種低層住居専用地域",
            10 => "第二種低層住居専用地域",
            11 => "第一種中高層住居専用地域",
            2 => "第二種中高層住居専用地域",
            12 => "第一種住居地域",
            3 => "第二種住居地域",
            13 => "準住居地域",
            4 => "近隣商業地域",
            5 => "商業地域",
            6 => "準工業地域",
            7 => "工業地域",
            8 => "工業専用地域",
            14 => "田園住居地域",
            99 => "無",
        ];

        return $kms[$value] ?? "";
    }

    private static function getValueArea($value)
    {
        $orderedList = [
            1 => '四ノ宮',
            2 => '安朱（＋上野）',
            3 => '御陵',
            4 => '日ノ岡',
            5 => '藤尾（大津市）',
            6 => '小山（＋髭茶屋＋八軒屋敷）',
            7 => '音羽',
            8 => '竹鼻',
            9 => '厨子奥',
            10 => '西野',
            11 => '北花山',
            12 => '上花山',
            13 => '川田',
            14 => '東野',
            15 => '大塚',
            16 => '大宅',
            17 => '椥辻',
            18 => '勧修寺',
            19 => '西野山',
            20 => '小野',
            21 => '醍醐（＋小栗栖）',
        ];

        $key = array_search($value, $orderedList);
        return $key !== false ? $key : null;
    }

    private static function getKOData($value)
    {
        $ko = [
            1 => "宅地",
            2 => "田",
            3 => "畑",
            4 => "山林",
            5 => "雑種地",
            6 => "原野",
            7 => "その他"
        ];

        return $ko[$value] ?? "-";
    }

    private static function getNCData($article)
    {
        $moveIn = $article["move_in"] ?? "";
        $moveInYear = $article["move_in_year"] ?? "";
        $moveInMonth = $article["move_in_month"] ?? "";
        $moveInContractMonth = $article["move_in_contract_month"] ?? "";

        $landProperty = [1,2,3];
        $property = $article["property"];
        $isArticleLand = in_array($property, $landProperty);

        if ($isArticleLand) {
            $moveIn = $article["land_delivery"] ?? "";
            $moveInYear = $article["delivery_year"] ?? "";
            $moveInMonth = $article["delivery_month"] ?? "";
        }

        if ($moveIn == 2) return "要相談";
        if ($moveIn == 1) return "即可能";
        if ($moveIn == 3) return "{$moveInYear}年{$moveInMonth}月";
        if ($moveIn == 4) return "契約後{$moveInContractMonth}ヶ月";
        return "-";
    }

    private static function getSection($article)
    {
        $property = $article["property"] ?? "";
        $landProperty = [4,5];
        $mansionProperty = [6,7];

        if (in_array($property, $landProperty)) return "";
        if (in_array($property, $mansionProperty)) return "";
        return $article["section"] ?? "";
    }

    private static function getParkingData($article)
    {
        $parking = $article["parking"] ?? "";
        $parkings = [
            1 => "無",
            0 => "-"
        ];
        $property = $article["property"] ?? "";
        $landProperty = [1,2,3];
        $houseNewProperty = [4,5];
        if (in_array($property, $landProperty)) {
            return "無";
        }
        if (in_array($property, $houseNewProperty)) {
            return $parkings[$parking] ?? "有";
        }

        if (in_array($parking, [0,1])) {
            return "無";
        }

        return "有";
    }

    private static function getHistory($article)
    {
        $prices = RelationPriceHistory::where("article_id", $article["building_id"] ?? "")->orderBy("id")->get();
        $history = "";
        foreach ($prices as $key => $price) {
            if ($key == (count($prices) - 1)) {
                $history .= "{$price->price}万円";
            } else {
                $history .= "{$price->price}万円→";
            }
        }
        return $history;
    }

    private static function getIIData($article)
    {
        $property = $article["property"] ?? "";
        $propertySub = $article["property_sub"] ?? "";
        $completedContractMonth = $article["completed_contract_month"] ?? "";
        $ageYear = $article["age_year"] ?? "";
        $ageMonth = $article["age_month"] ?? "";

        if (in_array($property, [4, 5]) && $propertySub == 1) {
            if (empty($ageYear) && empty($ageMonth) && !empty($completedContractMonth)) {
                return "契約後{$completedContractMonth}ヶ月";
            }
        }

        $landProperty = [1,2,3];
        if (in_array($property, $landProperty)) {
            return "";
        }


        if (empty($ageYear) && empty($ageMonth)) {
            return "-";
        }

        return "{$ageYear}/{$ageMonth}";
    }

    private static function getIEData($article, $year = null)
    {
        try {
            $allowProperty = [1,2,3,4,5];
            if (in_array($article["property"] ?? 0, $allowProperty)) {
                if (($article["property_sub"] ?? 0) != 2) return "";
            }

            $now = \Carbon\Carbon::now();
            $ageYear = trim($article["age_year"]);
            $ageMonth = trim($article["age_month"]);
            $dateAge = "{$ageYear}-{$ageMonth}-01";
            $target = \Carbon\Carbon::parse($dateAge);
            $month = $now->diffInMonths($target);
            $yearAge = intval($month / 12);
            $monthAge = $month % 12;

            if (is_null($year))
                return "{$yearAge}年{$monthAge}ヶ月";
            if ($year)
                return $yearAge;

            if ($ageMonth > 0)
                return $yearAge + 1;

            return $yearAge;
        } catch (\Error $error) {
            return "-";
        } catch (\Exception $exception) {
            return "-";
        }
    }

    private static function getFloorType($value)
    {
        $type = [
            1 => "DK",
            2 => "LDK",
            3 => "R",
            4 => "K",
            5 => "SK",
            6 => "SDK",
            7 => "LK",
            8 => "SLK",
            9 => "SLDK",
        ];

        return $type[$value] ?? 1;
    }

    private static function getODData($value)
    {
        $manager = [
            1, 2
        ];

        if (in_array($value, $manager)) return "自社物件";
        return "他社物件";
    }

    private static function getCurrentStatus($value)
    {
        $status = [
            1 => "更地",
            2 => "古家有",
            3 => "未造成",
            4 => "居住中",
            5 => "空家",
            6 => "賃貸中",
            7 => "建築中",
            8 => "完成済",
            9 => "未着工",
            10 => "居住中",
            11 => "空室",
            12 => "賃貸中",
            13 => "不明",
        ];

        return $status[$value] ?? "-";
    }

    private static function getStatus($value)
    {
        $closeStatus = [4,5,6];
        if (in_array($value, $closeStatus)) return "飛ばさない";

        return "売出";
    }

    private static function getMember($value)
    {
        if ($value == 0) return "×";
        if ($value == 1) return "○";
        return "";
    }

    private static function getLandCondition($value)
    {
        if (empty($value)) return "";
        if ($value == 1) return "有";
    }
    private static function getLandConditionLand($value)
    {
        if ($value == 0) return "無";
        if ($value == 1) return "有";
        if ($value == 2) return "";
    }

    private static function getRoadBurdenArea($article)
    {
        $road = $article["road_burden"] ?? "";
        $roadBurden = $article["road_burden_area"] ?? "";
        $property = $article["property"] ?? "";
        $mansionProperty = [6,7];

        if (in_array($property, $mansionProperty)) return "";

        if (in_array($road, [1,2])) {
            return $roadBurden;
        }

        return "";
    }

    private static function getBalconyDirection($value)
    {
        $direction = [
            1 => "北",
            2 => "北東",
            3 => "東",
            4 => "南東",
            5 => "南",
            6 => "南西",
            7 => "西",
            8 => "北西",
        ];

        return $direction[$value] ?? "";
    }

    private static function getRoadBurnden($value)
    {
        if (empty($value)) return "";

        if ($value == 0) return "無し";
        if ($value == 3) return "-";

        return "有り";
    }

    private static function getTotalArea($article)
    {
        $property = $article["property"] ?? "";
        $total = $article["total_area"] ?? "";
        $disallowProperty = [1,2,3,4,5];

        if (in_array($property, $disallowProperty)) return "";

        if (empty($total)) {
            return "";
        }
        $area = [
            1 => "壁芯",
            2 => "内法",
        ];

        return $area[$total] ?? "";
    }

    public static function getLand($data, $index)
    {
        $kind = self::getLandKind($data["land_kind{$index}"] ?? "");
        $direction = self::getLandDirection($data["land_direction{$index}"] ?? "");
        $width = $data["road_width{$index}"] ?? "";
        $frontage = $data["frontage{$index}"] ?? "";

        if (!empty($kind) && !empty($direction)) {
            $extension = "";
            if (!empty($width)) {
                $extension .= "幅員{$width}m";
            }
            if (!empty($frontage)) {
                $extension .= "間口{$frontage}m";
            }
            return "{$direction}側{$kind} {$extension}";
        }
    }

    private static function getLandDirection($direction)
    {
        $directions = [
            1 => "北",
            2 => "北東",
            3 => "東",
            4 => "南東",
            5 => "南",
            6 => "南西",
            7 => "西",
            8 => "北西"
        ];

        return $directions[$direction] ?? "";
    }

    private static function getLandKind($value)
    {
        $kind = [
            1 => "公道",
            2 => "私道"
        ];

        return $kind[$value] ?? "";
    }

    private static function getGPData($value)
    {
        $gp = [
            1 => "常駐",
            2 => "通勤",
            3 => "巡回",
            4 => "勤務形態未定"
        ];

        return $gp[$value] ?? "-";
    }

    private static function roundFl($number)
    {
        return floor($number * 100) / 100;
    }

    private static function getGDData($value)
    {
        $gb = [
            1 => "常駐",
            2 => "通勤",
            3 => "巡回",
            4 => "勤務形態未定"
        ];

        return $gb[$value] ?? "-";
    }

    private static function getGOData($value)
    {
        $gb = [
            0 => "-",
            5 => "自主管理"
        ];

        return $gb[$value] ?? "委託";
    }
}
