<?php

namespace App\Console\Commands;

use App\Models\Article;
use App\Models\MstCity;
use App\Models\RelationCitySchool;
use Illuminate\Console\Command;

class UpdateSchoolCityArticle extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'update:school';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $articles = Article::all();
        $count = count($articles);

        foreach ($articles as $key => $article) {
            $companyId = $article->company_id;
            $this->info("# {$key}/{$count} building_id: {$article->building_id}, company: {$companyId}");

            $primarySchoolCity1 = $article->primary_school_city;
            $primarySchoolCity2 = $article->primary_school2_city;
            $primarySchoolCity3 = $article->primary_school3_city;

            $secondarySchoolCity1 = $article->secondary_school_city;
            $secondarySchoolCity2 = $article->secondary_school2_city;
            $secondarySchoolCity3 = $article->secondary_school3_city;

            $primarySchoolCity1New = $this->getNewPrimarySchool($primarySchoolCity1, $companyId);
            $primarySchoolCity2New = $this->getNewPrimarySchool($primarySchoolCity2, $companyId);
            $primarySchoolCity3New = $this->getNewPrimarySchool($primarySchoolCity3, $companyId);

            $secondarySchoolCity1New = $this->getNewPrimarySchool($secondarySchoolCity1, $companyId);
            $secondarySchoolCity2New = $this->getNewPrimarySchool($secondarySchoolCity2, $companyId);
            $secondarySchoolCity3New = $this->getNewPrimarySchool($secondarySchoolCity3, $companyId);

            $article->update([
                "primary_school_city" => $primarySchoolCity1New,
                "primary_school2_city" => $primarySchoolCity2New,
                "primary_school3_city" => $primarySchoolCity3New,
                "secondary_school_city" => $secondarySchoolCity1New,
                "secondary_school2_city" => $secondarySchoolCity2New,
                "secondary_school3_city" => $secondarySchoolCity3New,
            ]);
        }
    }

    private function getNewPrimarySchool($cityName, $companyId)
    {
        if (empty($cityName)) {
            return "";
        }

        $existsCity = MstCity::where("name", $cityName)
            ->where("company_id", $companyId)
            ->exists();

        if ($existsCity) {
            return $cityName;
        }

        $cityName = str_replace("町", "", $cityName);

        $townName = RelationCitySchool::where("name", "like", "%{$cityName}%")
            ->first();

        if ($townName) {
            $fullCode = $townName->city_id;
            $cityNew = MstCity::whereRaw("concat(pref_code, code) = '${fullCode}'")->first();

            return optional($cityNew)->name;
        } else {
            $this->error("Error town: {$townName}, city: {$cityName}, company: {$companyId}");
            die();
        }
    }
}
