<?php

namespace App\Http\Controllers\Theming;

use App\Http\Controllers\Controller;
use App\Interfaces\PageRepositoryInterface;
use App\Services\AuthService;
use App\Services\ThemeService;
use App\Services\SortingService;

class ThemeController extends Controller
{
    protected PageRepositoryInterface $pages;
    protected AuthService $auth;
    protected ThemeService $themes;
    protected SortingService $sort;

    public function __construct(
        PageRepositoryInterface $pageRepository,
        AuthService $authService,
        ThemeService $themeService,
        SortingService $sortService,
    ) {
        $this->pages          = $pageRepository;
        $this->auth           = $authService;
        $this->themes         = $themeService;
        $this->sort           = $sortService;
        $theme                = $this->themes->getCurrentTheme();
        $themeTestImagePath   = '../public/theme/images/global/';
        $themeTestCSSPath     = '../public/theme/css/theme/';
        $themeTestScriptsPath = '../public/theme/scripts/theme/';
        //TODO: Create assset service class to handle moving theme assets around
        //move assets to public for testing
        foreach (
            new \DirectoryIterator('../content/themes/' . $theme . '/assets/images/global/') as $file
        ) {
            if ($file->isDot()) {
                continue;
            }
            //make theme directory if not present
            if (!is_dir($themeTestImagePath)) {
                mkdir($themeTestImagePath, 0755, true);
            }

            if (!is_file($themeTestImagePath . $file->getFileName())) {
                copy(
                    '../content/themes/' .
                        $theme .
                        '/assets/images/global/' .
                        $file->getFileName(),
                    $themeTestImagePath . $file->getFileName()
                );
            } else {
                //image is already there, so chill
            }
            //print $file->getFilename() . "\n";
        }
        //clear test theme css and script directories
        $styles = glob($themeTestCSSPath . '*'); // get all file names
        foreach ($styles as $file) { // iterate files
            if (is_file($file)) {
                unlink($file); // delete file
            }
        }
        $scripts = glob($themeTestScriptsPath . '*'); // get all file names
        foreach ($scripts as $file) { // iterate files
            if (is_file($file)) {
                unlink($file); // delete file
            }
        }

        //

        //copy theme assets to public
        $newcss = glob('../content/themes/' . $theme . '/assets/css/*');
        if (!is_dir($themeTestCSSPath)) {
            mkdir($themeTestCSSPath, 0755, true);
        }
        foreach ($newcss as $file) { // iterate files
            if (is_file($file)) {
                $path = explode('/', $file);
                copy($file, $themeTestCSSPath . $path[6]);
            }
        }
        $newjs = glob('../content/themes/' . $theme . '/assets/scripts/*');
        if (!is_dir($themeTestScriptsPath)) {
            mkdir($themeTestScriptsPath, 0755, true);
        }
        foreach ($newjs as $file) { // iterate files
            if (is_file($file)) {
                $path = explode('/', $file);
                copy($file, $themeTestScriptsPath . $path[6]);
            }
        }
    }

    public function getView($view = 'index')
    {
        $template;
        $pageData = [];
        switch ($view) {
            case "index":
            case "page":
                $view == 'index' ?
                    $template = 'fipamo-default-v2.index' :
                    $template = 'fipamo-default-v2.page';
                $page         = $this->pages->getById('09E5A362-BA31-4AE2-9DEE-C93DFBE005C3')->first();
                $data         = $this->sort->page($page);
                $pageData     = [
                    "debug"         => "true",
                    "theme"         => 'fipamo-default-v2',
                    "status"        => $this->auth::status(),
                    "title"         => "THEME PAGE",
                    "meta"          => $data['meta'],
                    "menu"          => $data['menu'],
                    "info"          => $data['info'],
                    "media"         => $data['media'],
                    "files"         => $data['files'],
                    "content"       => $data['content'],
                    "recent"        => $data['recent'],
                    "feature"       => $data['featured'],
                    "tags"          => $data['tags'],
                    "dynamicRender" => $data['dynamicRender'],
                ];
                break;
            case "tags":
                $template = 'fipamo-default-v2.tags';
                $data     = $this->sort->tags();
                $pageData = [
                    'debug'         => true, // for theme kit
                    'theme'         => 'fipamo-default-v2', // for theme kit
                    'title'         => 'Pages Tagged as Tag',
                    'dynamicRender' => $data['info']['dynamicRender'],
                    'tags'          => $data['info']['tags'][3]['pages'],
                    'info'          => $data['info'],
                    'menu'          => $data['info']['menu'],
                    'media'         => [
                        ['file'    => $data['info']['image'],
                            'type' => trim(pathinfo($data['info']['image'], PATHINFO_EXTENSION))]
                    ],
                ];
                break;
            case "archives":
            case "archive":
                $template = 'fipamo-default-v2.archive';
                $data     = $this->sort->archive();
                $pageData = [
                    'debug'         => true, // for theme kit
                    'theme'         => 'fipamo-default-v2', // for theme kit
                    'title'         => 'Archives',
                    'dynamicRender' => $data['info']['dynamicRender'],
                    'archive'       => $data['archive'],
                    'info'          => $data['info'],
                    'menu'          => $data['info']['menu'],
                    'media'         => [
                        ['file'    => $data['info']['image'],
                            'type' => trim(pathinfo($data['info']['image'], PATHINFO_EXTENSION))]
                    ],
                ];
                break;
        }
        if ($this->auth::status()) {
            return view($template, $pageData);
        } else {
            return redirect('dashboard/start');
        }
    }
}