<?php

namespace Dalten\RuianToUir\Writer;

use Dalten\RuianToUir\Converter\Result\ResultInterface;

/**
 * Abstraktní writer - zapouzdřuje společnou funkcionalitu jednotlivých writerů.
 */
abstract class AbstractWriter implements WriterInterface
{
    /**
     * Nastavuje formatter.
     *
     * @param \Dalten\RuianToUir\Formatter\FormatterInterface $_formatter formatter, který bude použit na převod dat
     */
    public function __construct(
        /**
         * Formatter, který bude použit na převod dat.
         */
        private readonly \Dalten\RuianToUir\Formatter\FormatterInterface $_formatter,
    ) {
    }

    /**
     * Zapíše data (dle konkrétní implementace).
     *
     * @param ResultInterface $data          pole převedených dat
     * @param string          $converterName název converteru, který provedl převod
     */
    public function write(ResultInterface $data, string $converterName): void
    {
        $this->executeWrite($this->_formatter->format($data), $converterName);
    }

    /**
     * Metoda, kterou přepisují potomkové. Dostane již zformátovaná data a obstarává vlastní zápis.
     *
     * @param string $data          zformátovaná data
     * @param string $converterName název converteru, který provedl převod
     */
    abstract protected function executeWrite(string $data, string $converterName): void;
}
