<?php

declare(strict_types=1);

namespace App\Domain\Ftp\Exceptions;

use App\Domain\Sysapi\Contracts\SysapiResult;
use RuntimeException;

class FtpException extends RuntimeException
{
    public function __construct(string $message, public readonly ?SysapiResult $sysapiResult = null)
    {
        parent::__construct($message);
    }

    public static function invalidName(string $name): self
    {
        return new self("Geçersiz FTP kullanıcı adı: '{$name}' (a-z 0-9 _, 3-32 karakter, harfle başlamalı)");
    }

    public static function alreadyExists(string $name): self
    {
        return new self("Bu kullanıcı adı zaten kullanılıyor: {$name}");
    }

    public static function packageLimitExceeded(int $current, int $max): self
    {
        return new self("Paket limiti aşıldı: {$current}/{$max} FTP hesabı");
    }

    public static function sysapiFailed(string $op, SysapiResult $r): self
    {
        return new self("FTP {$op} başarısız (exit {$r->exitCode}): {$r->stderr}", $r);
    }
}
