<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;

use App\Http\Requests\PageSlugValidation;
use App\Utilities\PolyFinder;
use App\Utilities\PageLink;
use App\Models\PageSlug;
use App\Models\Page;

class PageSlugsController extends Controller
{
    public function store(PageSlugValidation $request)
    {
        $pageable = PolyFinder::pageable(request('pageable_id'), request('pageable_type'));

        if (!auth()->user()->can('publish', $pageable)) {
            return response()->json(['error' => 'You do not have permission to create aliases'], 403);
        }

        $page_slug = (new PageSlug())->savePageSlug(request(), $pageable);

        return response()->json([
            'success' => 'Alias Saved',
            'page_slug' => $page_slug,
        ]);
    }

    public function remove($id)
    {
        $page_slug = PageSlug::findOrFail($id);

        if (!auth()->user()->can('publish', $page_slug->pageable)) {
            return response()->json(['error' => 'You do not have permission to delete aliases'], 403);
        }

        $page_slug->delete();

        return response()->json([
            'success' => 'Alias Removed',
        ]);
    }

    public function getSlug()
    {
        Validator::make(request()->all(), [
            'item_id' => 'required',
            'item_type' => 'required',
        ])->validate();

        $slug = PageLink::getSlugFromIdAndHash(request());

        return response()->json([
            'slug' => $slug,
        ]);
    }

    public function getLink()
    {
        Validator::make(request()->all(), [
            'item_slug' => 'required',
            'item_type' => 'required',
        ])->validate();

        $class = 'App\\Models\\'.Str::studly(request('item_type'));

        $item = (new $class())->findByFullSlug(request('item_slug'));

        return response()->json([
            'link' => $item?->id,
        ]);
    }
}
