<?php

declare(strict_types=1);

namespace App\Domain\Domain\Enums;

/**
 * Domain tipi.
 *
 * Master plan'dan:
 *   - main:      Hesabın ana domain'i. Her hesapta 1 adet, hesap oluşturulurken set edilir.
 *   - addon:     Ek bağımsız domain. Kendi DocRoot'una sahip (genelde /home/<user>/<domain>/).
 *   - parked:    Addon veya main'in alias'ı. Aynı DocRoot, sadece ServerAlias eklenir.
 *   - subdomain: Bir parent'ın alt-domain'i (örn: blog.example.com).
 *                DocRoot genelde parent'ın altında subdirectory.
 */
enum DomainType: string
{
    case Main = 'main';
    case Addon = 'addon';
    case Parked = 'parked';
    case Subdomain = 'subdomain';

    public function label(): string
    {
        return match ($this) {
            self::Main => 'Ana Alan Adı',
            self::Addon => 'Ek Alan Adı',
            self::Parked => 'Park Edilmiş',
            self::Subdomain => 'Alt Alan Adı',
        };
    }

    public function requiresParent(): bool
    {
        return $this === self::Parked || $this === self::Subdomain;
    }

    public function getsOwnDocumentRoot(): bool
    {
        return $this === self::Main || $this === self::Addon;
    }
}
