<?php

use Illuminate\Database\Seeder;
use App\Language;

class GenerateLanguage extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $list = Language::all();
        $enList = [];
        $jaList = [];

        foreach ($list as $item) {
            $langKeys = explode(".", $item->key);
            $row = $this->getLangItem($langKeys, count($langKeys), ['en' => $item->en, 'ja' => $item->ja]);
            $this->setLangItem($row, $enList, 'en');
            $this->setLangItem($row, $jaList, 'ja');
        }

        $this->writeLanguageFile($enList, 'en');
        $this->writeLanguageFile($jaList, 'ja');
    }

    private function getLangItem($langKeys, $startKey, $child) {
        $startKey--;
        if (isset($langKeys[$startKey])) {
            $parent = [];
            $parent[$langKeys[$startKey]] = $child;
            $child = $this->getLangItem($langKeys, $startKey, $parent);
        }

        return $child;
    }

    private function setLangItem($row, &$langList, $lang) {
        if (is_array($row) && !isset($row['en']) && !isset($row['ja'])) {
            foreach ($row as $key => $item) {
                if (!isset($langList[$key])) $langList[$key] = [];
                $this->setLangItem($item, $langList[$key], $lang);
            }
        } else {
            $langList = $row[$lang];
        }
    }

    private function writeLanguageFile($data, $lang = 'en') {
        $enLangFile = resource_path('js/backend/lang/' . $lang . '.js');
        if (file_exists($enLangFile)) unlink($enLangFile);
        if (count($data) > 0) {
            $enContent = "export default " . json_encode($data, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT) . ";";
            $enContent = str_replace("'", "\++|", $enContent);
            $enContent = str_replace("\'", "\++|", $enContent);
            $enContent = str_replace('\"', "\|||", $enContent);
            $enContent = str_replace("\/", "\--/", $enContent);
            $enContent = str_replace('"', "'", $enContent);
            $enContent = str_replace("\++|", "\'", $enContent);
            $enContent = str_replace("\|||", '"', $enContent);
            $enContent = str_replace("\--/", "/", $enContent);
            file_put_contents($enLangFile, $enContent);

            $renewContent = "";
            $fHandle = fopen($enLangFile, "r");
            while (!feof($fHandle)) {
                $strRow = fgets($fHandle);
                if (strpos($strRow, ":") !== false) {
                    $arr = explode(":", $strRow, 2);
                    if (strpos($arr[0], "-") === false) {
                        $newKey = trim(str_replace("'", "", $arr[0]));
                        $strRow = str_replace("'" . $newKey . "':", $newKey . ":", $strRow);
                    }
                }
                $renewContent .= $strRow;
            }
            fclose($fHandle);
            file_put_contents($enLangFile, $renewContent);
        }
    }

    private function generateRootFileForChecking() {
        $rootFile = resource_path('js/backend/lang/en.js');
        $enRootFile = resource_path('js/backend/lang/en_root.js');
        $renewContent = "";
        $fHandle = fopen($rootFile, "r");
        while (!feof($fHandle)) {
            $strRow = fgets($fHandle);
            $strRowNew = trim($strRow);
            if ($strRowNew != "" && $strRowNew != "/*{importRouterLang}*/" && $strRowNew != "/*{importModuleLang}*/") {
                $renewContent .= $strRow;
            }
        }
        fclose($fHandle);
        file_put_contents($enRootFile, $renewContent);
    }
}
