<?php

namespace App\Http\Controllers\Dash;

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

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

    public function __construct(
        PageRepositoryInterface $pageRepository,
        AuthService $authService,
        ThemeService $themeService,
        SortingService $sortingService
    ) {
        $this->pages  = $pageRepository;
        $this->auth   = $authService;
        $this->themes = $themeService;
        $this->sort   = $sortingService;
    }

    public function login()
    {
        if ($this->auth::status()) {
            return redirect('dashboard/start');
        } else {
            return view('back.login', [
                "status" => $this->auth::status(),
                "title"  => "Hi!"
            ]);
        }
    }

    public function start()
    {
        $result = [];
        if ($this->auth::status()) {
            $result = $this->pages->getGroup(1, 4);
        }
        return view('back.start', [
            "status" => $this->auth::status(),
            "result" => $result,
            "title"  => "Start"
        ]);
    }

    public function book($pageFilter = 'all', $pageNum = 1)
    {
        $result = [];
        if ($this->auth::status()) {
            $result = $this->pages->getGroup($pageNum, 4, $pageFilter);
        }
        return view('back.book', [
            "status"      => $this->auth::status(),
            "result"      => $result,
            "currentPage" => $pageNum,
            "title"       => "Pages"
        ]);
    }

    public function page($mode, $uuid)
    {
        $title;
        $page                    = [];
        $views                   = [];
        $mode == 'edit' ? $page  = $this->pages->getById($uuid) : $page = [];
        $mode == 'edit' ? $title = $page['title'] : $title = 'Add New';
        $mode == 'edit' ? $views = $this->themes->getCustomViews($page['layout']) : $views[] = 'page';

        return view('back.page', [
            "status" => $this->auth::status(),
            "mode"   => $mode,
            "page"   => $page,
            "views"  => $views,
            "title"  => $title,
        ]);
    }

    public function settings()
    {
        return view('back.settings', $this->sort->settings());
    }
}