<?php
declare(strict_types=1);

namespace App\Framework\Console\Screen;

/**
 * Bildschirm-Steuerungscodes nach ANSI-Standard.
 */
enum ScreenControlCode: string
{
    case CLEAR_ALL = "2J";         // Gesamten Bildschirm löschen
    case CLEAR_ABOVE = "1J";        // Bildschirm vom Cursor nach oben löschen
    case CLEAR_BELOW = "0J";        // Bildschirm vom Cursor nach unten löschen
    case CLEAR_LINE = "2K";         // Komplette Zeile löschen
    case CLEAR_LINE_LEFT = "1K";    // Zeile vom Cursor nach links löschen
    case CLEAR_LINE_RIGHT = "0K";   // Zeile vom Cursor nach rechts löschen
    case SCROLL_UP = "S";           // Bildschirm nach oben scrollen
    case SCROLL_DOWN = "T";         // Bildschirm nach unten scrollen
    case SAVE_SCREEN = "?47h";      // Bildschirm speichern
    case RESTORE_SCREEN = "?47l";   // Bildschirm wiederherstellen
    case ALTERNATE_BUFFER = "?1049h"; // Alternativen Puffer aktivieren
    case MAIN_BUFFER = "?1049l";    // Hauptpuffer wiederherstellen

    /**
     * Formatiert den ANSI-Steuerungscode korrekt.
     */
    public function format(int ...$params): string
    {
        // Wenn keine Parameter, dann ohne formatieren
        if (empty($params)) {
            return "\033[{$this->value}";
        }

        // Wenn Parameter vorhanden sind, formatieren
        $paramStr = implode(';', $params);
        return "\033[{$paramStr}{$this->value}";
    }
}
