<?php

namespace App\Enums;

/**
 * Account role. Hierarchy: admin > operator > viewer. admin has every ability; operator can run
 * day-to-day operations (services, files, terminal to managed servers) but not the dangerous
 * control-plane actions; viewer is read-only.
 */
enum Role: string
{
    case Admin = 'admin';
    case Operator = 'operator';
    case Viewer = 'viewer';

    /** Numeric rank for hierarchy comparisons. */
    public function rank(): int
    {
        return match ($this) {
            self::Admin => 3,
            self::Operator => 2,
            self::Viewer => 1,
        };
    }

    /** True when this role is at least as privileged as $other. */
    public function atLeast(self $other): bool
    {
        return $this->rank() >= $other->rank();
    }

    /** Localised label (lang/{de,en}/roles.php key role_<value>). */
    public function label(): string
    {
        return (string) __('roles.role_'.$this->value);
    }
}
