<?php

namespace App\Http\Controllers;

use App\Models\Tenant;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;

class TenantController extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function newView() {
        return view("tenant.new");
    }

    public function newTenant(Request $request) {

        $validated = $request->validate([
            'name' => 'required|max:255',
            'url' => 'required|unique:tenants|regex:/^[a-z0-9]{8,30}$/i'
        ]);

        $tenant = new Tenant();
        $tenant->name = $validated["name"];
        $tenant->url = $validated["url"];
        $tenant->template = "default";
        $tenant->owner = Auth::user()->id;
        $tenant->saveOrFail();

        $this->switchTenantById($tenant->id);


        return redirect("/d");
    }

    public function switchTenant($url, Request $request) {
        $tenant = Tenant::getByUrl($url);
        if($tenant->owner == Auth::id()) {
            $this->switchTenantById($tenant->id);
            return Redirect::back();
        } else {
            return Redirect::back()->with(["msg" => "No Access to given Tenant"]);
        }
    }

    private function switchTenantById($id) {
        session(["current_tenant_id" => $id]);
    }
}
