<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Libs\Facades\Localization;
use App\Libs\Services\ProjectsSyncService;
use App\Libs\Services\SearchService;
use App\Libs\Support\SitemapGenerator;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\App;
use Silber\PageCache\Cache;

class HomeController extends Controller
{
    public function getIndex()
    {
        $user = Auth::guard('admin')->user();
        if ($user->backendRole->short_name == 'read') {
            return view('admin/pages/read-only');
        }

        $path = $user->backendRole->initial_path;
        return redirect()->to($path ? $path : "/admin/content/index/page");
    }

    public function getMaintenance()
    {
        $website = Localization::getWebsite();

        return view('admin/pages/maintenance')
            ->with(array(
                'website' => $website
            ));
    }

    public function getProjectsApi()
    {
        $website = Localization::getWebsite();

        return view('admin/pages/projects-api')
            ->with(array(
                'website' => $website
            ));
    }

    public function postRebuildSitemap()
    {

        $sitemapGenerator = new SitemapGenerator();

        $sitemapGenerator->buildSitemap();

        session()->flash('message', trans('backend.sitemap_rebuild_complete'));

        return redirect()->to('/admin/maintenance');
    }

    public function postRebuildSearch(SearchService $service)
    {
        $website = Localization::getWebsite();

        $service->rebuild($website);

        session()->flash('message', trans('backend.search_rebuild_complete'));

        return redirect()->to('/admin/maintenance')->with("message", "Search Rebuild Complete");
    }

    public function postSyncProjects(ProjectsSyncService $service)
    {
        // $service->syncProjects();
        $service->syncProjects();
    }

    public function postSyncProject(Request $request, ProjectsSyncService $service)
    {
        $validator = \Validator::make(
            request()->all(),
            array(
                'api_id' => 'required|integer',
            )
        );

        if ($validator->fails()) {
            return response()->json(['message' => "Invalid Project API ID"]);
        }

        $projectApiId = $request->input('api_id');
        // $service->syncProjects();
        ob_start();
        $service->syncProjectById($projectApiId);
        $result = ob_get_contents();
        ob_end_clean();

        return response()->json(['message' => $result]);
    }

    public function postClearCache()
    {
        $cache = App::make(Cache::class);

        $cache->clear();

        session()->flash('message', trans('backend.cache_cleared'));

        return redirect()->to('/admin/maintenance');
    }
}
