<?php

namespace PhpOffice\PhpSpreadsheetTests\Functional;

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Shared\File;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PHPUnit\Framework\TestCase;

/**
 * Base class for functional test to write and reload file on disk across different formats.
 */
abstract class AbstractFunctional extends TestCase
{
    /**
     * Write spreadsheet to disk, reload and return it.
     *
     * @param Spreadsheet $spreadsheet
     * @param string $format
     * @param null|callable $readerCustomizer
     *
     * @return Spreadsheet
     */
    protected function writeAndReload(Spreadsheet $spreadsheet, $format, callable $readerCustomizer = null)
    {
        $filename = tempnam(File::sysGetTempDir(), 'phpspreadsheet-test');
        $writer = IOFactory::createWriter($spreadsheet, $format);
        $writer->save($filename);

        $reader = IOFactory::createReader($format);
        if ($readerCustomizer) {
            $readerCustomizer($reader);
        }
        $reloadedSpreadsheet = $reader->load($filename);
        unlink($filename);

        return $reloadedSpreadsheet;
    }
}
