<?php

namespace App\Support;

use App\Models\Impresora;

/**
 * Ancho en caracteres y dots ESC/POS según configuración de impresora térmica.
 */
final class ThermalLineWidth
{
    /** Caracteres por línea (Font A) para papel de 80 mm. */
    public const DEFAULT_CHARS_80MM = 48;

    /** Caracteres por línea para papel de 58 mm. */
    public const DEFAULT_CHARS_58MM = 32;

    public static function charsFromImpresora(?Impresora $impresora): int
    {
        $raw = (int) ($impresora?->ancho_papel ?? 80);

        return match (true) {
            $raw === 80 => self::DEFAULT_CHARS_80MM,
            $raw === 58 => self::DEFAULT_CHARS_58MM,
            $raw >= 70 && $raw <= 120 => max(32, min(64, (int) round($raw * 0.6))),
            default => max(32, min(64, $raw)),
        };
    }

    public static function dotsFromImpresora(?Impresora $impresora): int
    {
        $chars = self::charsFromImpresora($impresora);

        return $chars >= self::DEFAULT_CHARS_80MM ? 576 : 384;
    }
}
