<?php

namespace App\Services;

use Illuminate\Support\Facades\File;

class RenderService
{
    private $sort;
    private $settings;
    private $contents;
    private $pageInfo;
    private $menu;
    private $background;
    private $theme;

    public function __construct(
        SortingService $sortingService,
        SettingsService $settingsService,
        ContentService $contentService
    ) {
        $this->sort     = $sortingService;
        $this->settings = $settingsService;
        $this->contents = $contentService;
        $this->theme    = $this->settings->getGlobal()['theme'];
    }

    public function archive()
    {
        $template = $this->theme . '.archive';
        $data     = $this->sort->archive();
        $pageData = [
            'theme'         => $this->theme, // 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))]
            ],
        ];
        $location = '../public/archive.html';
        File::put(
            $location,
            view($template)
                ->with($pageData)
                ->render()
        );
    }

    public function tags()
    {
        $data = $this->sort->tags();
        foreach ($data['tags'] as $item) {
            //$template    = 'tags.twig';
            $template = $this->theme . '.tags';
            $pageData = [
                'theme'         => $this->theme, // for theme kit
                'title'         => 'Pages Tagged as ' . $item['tag_name'],
                'dynamicRender' => $data['info']['dynamicRender'],
                'info'          => $data['info'],
                'menu'          => $data['info']['menu'],
                'pages'         => $item['pages'],
                'media'         => [
                    ['file'    => $data['info']['image'],
                        'type' => trim(pathinfo($data['info']['image'], PATHINFO_EXTENSION))]
                ],
            ];

            $location = '../public/tags/' . $item['slug'] . '.html';

            if (!is_dir('../public/tags')) {
                mkdir('../public/tags', 0755, true);
            }

            File::put(
                $location,
                view($template)
                    ->with($pageData)
                    ->render()
            );
        }
    }

    public function pages()
    {
        $pages = $this->contents->loadAllPages();
        foreach ($pages as $page) {
            $template;
            $page['layout'] == 'index' ?
                $template = $this->theme . '.index' :
                $template = $this->theme . '.page';

            $data     = $this->sort->page($page);
            $pageData = [
                "theme"         => $this->theme,
                "status"        => false,
                "title"         => $data['title'],
                "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'],
            ];

            if (str_contains($page['layout'], 'index')) {
                $location = '../public/index.html';
            } else {
                // if page is a menu item, render the page on public root
                if ($page['menu'] == 'true') {
                    $location = '../public/' . $page['slug'] . '.html';
                } else {
                    $dir = '../public/' . $page['path'];
                    if (!is_dir($dir)) {
                        mkdir($dir, 0755, true);
                    }
                    $location = '../public/' . $page['path'] . '/' . $page['slug'] . '.html';
                }
            }
            File::put($location, view($template)->with($pageData)->render());
        }
    }
}