<?php

namespace App\Http\Controllers\Parser;

use App\Developer;
use App\Helpers\ImageSize;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ImageUploadTrait;
use App\Http\Controllers\Traits\Transliteration;

class WriteDevelopersController extends Controller
{
    use ImageUploadTrait, Transliteration;

    private $count = 1;

    const DEVELOPERS = 'developers.json';
    const DEFAULT_BIRTH_MONTH_DAY = '01' . '.' . '01' . '.';
    const BIRTHDAY = '2019';

    public function index()
    {
        dump('take file...');
        $dataDevelopers = $this->getJsonFile(self::DEVELOPERS);
//
        dump('start...');
        foreach ($dataDevelopers as $key => $developers) {
            $this->getDevelopers($developers);
        }
        dump('Save Developer success!');
    }

    public function getDevelopers(array $developers)
    {
        foreach ($developers as $developer) {
            $this->writeDeveloper($developer);
        }
    }

    private function writeDeveloper($data): void
    {
        $transliteration = $this->transliteration($data->name);

        set_time_limit(300);
        $developer = new Developer();
        $developer->id = $this->count;
        $developer->name = $this->isEmpty($data->name);
        $developer->code = $transliteration;
        $developer->birthday = !empty($data->birthday) && (int)$data->birthday > 1970 ? self::DEFAULT_BIRTH_MONTH_DAY . $data->birthday : null;
        $developer->site_link = $this->isEmpty($data->siteLink);
        $developer->logotype_icon = $this->getLogoTypeIcon($data->mainLogo, $transliteration);
        $developer->banner = $this->getBanner($data->banner, $transliteration);
        $developer->facebook = $this->isEmpty($data->facebookLink);
//        $developer->youtube = $this->isEmpty($data->youTubeLink);
        $developer->save();

        $this->count += 1;
    }

    private function isEmpty(string $check, $else = null)
    {
        if (!empty($check)) {
            return $check;
        } else {
            return $else;
        }
    }

    private function getBanner(string $banner, $name)
    {
        return $this->saveImage(
            $banner, ImageSize::DEVELOPER_BANNER, ImageSize::DEVELOPER_BANNER_WEBP,
            ImageSize::DEVELOPER_BANNER_SIZE, $name);
    }

    private function getLogoTypeIcon(string $logo, $name)
    {
        return $this->saveImage(
            $logo, ImageSize::DEVELOPER_LOGO, ImageSize::DEVELOPER_LOGO_WEBP,
            ImageSize::DEVELOPER_LOGO_SIZE, $name);
    }

    private function getJsonFile($filename)
    {
        return json_decode(file_get_contents(public_path() . '/parser/' . $filename));
    }
}
