<?php

declare(strict_types=1);

namespace App\Support\System;

use App\Filament\System\Pages\Directory\Tenants;
use App\Filament\System\Pages\Directory\ViewTenant;
use App\Filament\System\Pages\Directory\ViewWorkspace;
use App\Filament\System\Pages\Directory\Workspaces;
use App\Models\Tenant;
use App\Models\Workspace;

final class SystemDirectoryLinks
{
    public static function workspacesIndex(): string
    {
        return Workspaces::getUrl(panel: 'system');
    }

    public static function workspaceDetail(Workspace|int $workspace): string
    {
        $workspaceId = $workspace instanceof Workspace ? (int) $workspace->getKey() : (int) $workspace;

        return ViewWorkspace::getUrl(['workspace' => $workspaceId], panel: 'system');
    }

    public static function tenantsIndex(): string
    {
        return Tenants::getUrl(panel: 'system');
    }

    public static function tenantDetail(Tenant|string|int $tenant): string
    {
        $tenantRouteKey = self::tenantRouteKey($tenant);

        return ViewTenant::getUrl(['tenant' => $tenantRouteKey], panel: 'system');
    }

    public static function adminWorkspace(Workspace|int $workspace): string
    {
        $workspaceId = $workspace instanceof Workspace ? (int) $workspace->getKey() : (int) $workspace;

        return route('filament.admin.resources.workspaces.view', ['record' => $workspaceId]);
    }

    public static function adminTenant(Tenant|string|int $tenant): string
    {
        $tenantRouteKey = self::tenantRouteKey($tenant);

        return route('filament.admin.resources.tenants.view', ['record' => $tenantRouteKey]);
    }

    private static function tenantRouteKey(Tenant|string|int $tenant): string
    {
        if ($tenant instanceof Tenant) {
            return (string) $tenant->getRouteKey();
        }

        return (string) $tenant;
    }
}
