<?php

declare(strict_types=1);

namespace App\Service\Export;

use App\ApiResources\Export\ExportRequest;
use App\Entity\Core\File;
use App\Service\Export\Model\ExportModelInterface;

/**
 * Classe de base des services d'export.
 */
interface ExporterInterface
{
    /**
     * Le service supporte-t-il ce type d'ExportRequest.
     */
    public function support(ExportRequest $exportRequest): bool;

    /**
     * Exécute l'opération d'export correspondant à la requête passée
     * en paramètre.
     */
    public function export(ExportRequest $exportRequest): File;

    /**
     * Create a pending file record in the database.
     */
    public function prepareFile(ExportRequest $exportRequest, bool $flushFile = true): File;

    /**
     * Construit le modèle de données qui servira au render du template.
     */
    public function buildModel(ExportRequest $exportRequest): ExportModelInterface;
}
