<?php

namespace App\Http\Controllers;

use App\Interfaces\PageRepositoryInterface;
use App\Services\Assets\AssetService;
use App\Services\Data\SettingsService;
use App\Services\Data\SortingService;

use function _\find;

class FrontController extends Controller
{
    protected $settings;
    protected PageRepositoryInterface $pages;
    protected AssetService $assets;
    protected SortingService $sort;

    public function __construct(
        PageRepositoryInterface $pageRepository,
        SettingsService $settingsService,
        AssetService $assetService,
        SortingService $sortService,
    ) {
        $this->pages    = $pageRepository;
        $this->settings = $settingsService;
        $this->assets   = $assetService;
        $this->sort     = $sortService;
    }

    //REFACTOR: there is some method overlap between index and pages, so that needs to be addressed
    public function index($first = 00, $second = 00, $third = 00)
    {
        $global       = $this->settings->getGlobal();
        $currentTheme = $this->assets->getCurrentTheme();
        $template;
        $pageData = [];
        $pages    = $this->pages->getAll();
        //check if configs are present
        if (file_exists(env('FOLKS_PATH')) && file_exists(env('SETTINGS_PATH'))) {
            if ($global['dynamicRender'] == 'true') {
                if (is_numeric($first)) {
                    if ($first == 00 || !isset($first)) {
                        $page     = $pages->where('id', 1)->first();
                        $pageData = $this->sort->page($page);
                        $template = $currentTheme . '.index';
                    } else {
                        $page     = $this->pages->getBySlug($third);
                        $pageData = $this->sort->page($page);
                        $template = $currentTheme . '.' . $page['layout'];
                    }
                } else {
                    if ($first == null || $first == '') {
                        $page     = $pages->where('id', 1)->first();
                        $pageData = $this->sort->page($page);
                        $template = $currentTheme . '.index';
                    } else {
                    }
                }
                return view($template, $pageData);
            } else {
                if (is_file('../public/index.html')) {
                    return response()->file('../public/index.html');
                } else {
                    return redirect()->intended('dashboard/start');
                }
            }
        } else {
            return view('back.init', ["status" => false, "title" => "Set Up"]);
        }
    }

    public function page($first = 00, $second = 00, $third = 00)
    {
        $currentTheme = $this->assets->getCurrentTheme();
        switch ($first) {
            case 'archive':
            case 'archives':
                $template = $currentTheme . '.archive';
                $pageData = $this->sort->archive();
                break;
            case 'tags':
                $template = $currentTheme . '.tags';
                $tags     = $this->sort->tags(false);
                $tagData  = find($tags['tags'], ['tag_name' => $second]);
                $pageData = [
                    'theme'         => $currentTheme, // for theme kit
                    'title'         => 'Pages Tagged as ' . $second,
                    'dynamicRender' => $tags['dynamicRender'],
                    'info'          => $tags['info'],
                    'menu'          => $tags['menu'],
                    'pages'         => $tagData['pages'],
                    'media'         => $tags['media'],
                ];
                break;
        }
        return view($template, $pageData);
    }
}