<?php

declare(strict_types=1);

namespace App\Support\OperateHub;

use App\Models\ManagedEnvironment;
use App\Models\Workspace;
use App\Support\Navigation\AdminSurfaceScope;

final readonly class ResolvedShellContext
{
    public function __construct(
        public ?Workspace $workspace,
        public ?ManagedEnvironment $tenant,
        public AdminSurfaceScope $pageCategory,
        public string $state,
        public string $displayMode,
        public string $workspaceSource = 'none',
        public string $tenantSource = 'none',
        public string $recoveryAction = 'none',
        public ?string $recoveryDestination = null,
        public ?string $recoveryReason = null,
    ) {}

    public function hasWorkspace(): bool
    {
        return $this->workspace instanceof Workspace;
    }

    public function hasTenant(): bool
    {
        return $this->tenant instanceof ManagedEnvironment;
    }

    public function showsRecoveryNotice(): bool
    {
        return $this->displayMode === 'recovery' || $this->recoveryReason !== null;
    }
}
