<?php

namespace App\Console\Commands;

use App\Models\Part;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\File;

class clientAssetGenerator extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'client';

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

    /**
     * Execute the console command.
     */
    public function handle()
    {
        // make gfx variable
        $gfxes = gfx();

        $vars['xshop-background'] = $gfxes['background'] ?? '#000000';
        $vars['xshop-primary'] = $gfxes['primary'] ?? '#6e0000';
        $vars['xshop-diff'] = getGrayscaleTextColor($gfxes['primary']) ?? '#6e0000';
        $vars['xshop-diff2'] = getGrayscaleTextColor($gfxes['secondary']) ?? '#6e0000';
        $vars['xshop-secondary'] = $gfxes['secondary'] ?? '#ff0000';
        $vars['xshop-text'] = $gfxes['text'] ?? '#111111';
        $vars['xshop-border-radius'] = $gfxes['border-radius'] ?? '7px';
        $vars['xshop-shadow'] = $gfxes['shadow'] ?? '2px 2px 4px #777777';


        // prepare client.scss and add gfx variable
        $js = "// PLEASE DO NOT EDIT THIS FILE, \n// IF YOU WANT ADD ANY CODE CREATE NEW JS INTO client-custom \n import axios from 'axios'; \n window.axios = axios; \n \n window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';" . PHP_EOL;
        $variables = "// PLEASE DO NOT EDIT THIS FILE, \n// IF YOU WANT ADD ANY CODE CREATE NEW SCSS INTO client-custom" . PHP_EOL;
        $appVariables = '';
        foreach ($vars as $k => $var) {
            $appVariables .= '$' . "$k:$var;" . PHP_EOL;
        }
        $appVariables .= ":root{" . PHP_EOL;
        foreach ($vars as $k => $var) {
            $appVariables .= "--$k:$var;" . PHP_EOL;
        }
        $appVariables .= "}" . PHP_EOL . PHP_EOL;

        file_put_contents(resource_path() . '/sass/client-custom/_app_variables.scss', $appVariables);
        // add custom scss and js
        $files = File::allFiles(resource_path() . '/sass/client-custom');

        foreach ($files as $file) {
            if ($file->getType() == 'file' && $file->getExtension() == 'scss') {
                $variables .= '@use "client-custom/' .
                    substr(trim($file->getBasename(), '_'), 0, -5)
                    . '";' . PHP_EOL;
            }

        }
        $files = File::allFiles(resource_path() . '/js/client-custom');

        foreach ($files as $file) {

            if ($file->getType() == 'file' && $file->getExtension() == 'js') {
                $js .= 'import "./client-custom/' . $file->getBasename() . '";' . PHP_EOL;
            }

        }
        // add parts scss & js
        foreach (Part::distinct()->get() as $part) {
            if (filesize(__DIR__ . '/../../../resources/views/segments/' . $part->segment . '/' . $part->part . '/' . $part->part . '.scss') > 10) {
                $variables .= '@use "../views/segments/' . $part->segment . '/'
                    . $part->part . '/' . $part->part . '";' . PHP_EOL;
            }
            if (filesize(__DIR__ . '/../../../resources/views/segments/' . $part->segment . '/' . $part->part . '/' . $part->part . '.js') > 10) {
                $js .= 'import "../views/segments/' . $part->segment . '/'
                    . $part->part . '/' . $part->part . '.js";' . PHP_EOL;
            }
        }

        // save scss
        file_put_contents(resource_path() . '/sass/client.scss', $this->removeDuplicateLines($variables));
        file_put_contents(resource_path() . '/js/client.js', $this->removeDuplicateLines( $js ));
    }


    // remove duplicate lines
    private function removeDuplicateLines($text)
    {
        $lines = explode("\n", $text);
        $uniqueLines = array_unique($lines);
        $uniqueText = implode("\n", $uniqueLines);
        return $uniqueText;
    }
}
