using Inspectron.Epson.PrintServer.Printers.Utils;
using Inspectron.Epson.PrintServer.PrintServices;

namespace Inspectron.Epson.PrintServer.Printers;

public class TM_U220II : IPrinter
{
    private readonly EpsonPrinter _printer;

    public TM_U220II(EpsonPrinter printer)
    {
        _printer = printer;
    }

    public async Task InitAsync()
    {
        await _printer.InitAsync();
        await Task.Delay(200);
    }

    public Task PrintImageAsync(string path)
    {
        return Task.CompletedTask;
    }

    public async Task SetFontSizeAsync(int fontSize)
    {
        await _printer.SetBiggerFontTM220(fontSize == 2);
        await Task.Delay(200);
        await _printer.SelectFont(EpsonCommands.PrinterFont.A);
        await Task.Delay(200);
    }

    public async Task PrintAsync(List<PrintCommand> commands)
    {
        foreach (var command in commands)
        {
            await _printer.SetBiggerFontTM220(command.IsBig);
            await Task.Delay(200);
            await _printer.SetRedColor(command.IsRed);
            await Task.Delay(200);
            await _printer.SetEmphasized(command.IsBold);
            await Task.Delay(200);
            await _printer.PrintTextAsync(command.Text + "\n");
            await Task.Delay(200);
        }

        await _printer.FeedLinesAsync(5);
        await Task.Delay(200);
    }

    public async Task Cut()
    {
        await _printer.CutAsync();
        await Task.Delay(200);
    }
}