<?php

namespace App\Http\Controllers;

use App\Services\Data\AuthService;
use Illuminate\Http\Request;

class RouteController extends Controller
{
    protected $dash;
    protected $gate;
    protected $theme;
    protected $front;
    protected $auth;

    public function __construct(
        DashController $dashController,
        AuthController $authController,
        ThemeController $themeController,
        FrontController $frontController,
        AuthService $authService,
    ) {
        $this->dash  = $dashController;
        $this->gate  = $authController;
        $this->theme = $themeController;
        $this->front = $frontController;
        $this->auth  = $authService;
    }

    public function get($first = null, $second = null, $third = null, $fourth = null)
    {
        if (isset($first) && !is_numeric($first)) {
            switch ($first) {
                case 'dashboard':
                    if ($this->auth::status()) {
                        return $this->dash->init($second, $third, $fourth);
                    } else {
                        return $this->dash->login();
                    }
                    break;
                case 'theme':
                    if ($this->auth::status()) {
                        if (isset($second)) {
                            return $this->theme->getView($third);
                        } else {
                            return $this->theme->start();
                        }
                    } else {
                        return $this->dash->login();
                    }
                    break;
                case 'tags':
                case 'archives':
                    return $this->front->page($first, $second, $third);
                    break;
            }
        } else {
            return $this->front->index($first, $second, $third);
        }
    }

    public function post(Request $request)
    {
        switch ($request->path()) {
            case 'login':
                return $this->gate->enter($request);
                break;
        }
    }
}