<?php

namespace App\Model;

use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
use Symfony\Contracts\HttpClient\HttpClientInterface;
use Psr\Log\LoggerInterface;

class CsvParser implements CsvParserInterface
{
    private string $spreadsheetUrl = '';
    protected HttpClientInterface $client;
    private LoggerInterface $logger;

    public function __construct(HttpClientInterface $client, LoggerInterface $logger)
    {
        $this->client = $client;
        $this->logger = $logger;
    }

    public function getRows(): array
    {
        try {
            $sheetData = $this->getDataFromGoogleSheets();
            $lines = explode("\n", $sheetData);
            $header = str_getcsv(array_shift($lines));
            $rows = array_map('str_getcsv', $lines);
            return ['header' => $header, 'rows' => $rows];
        } catch (\Exception $e) {
            $this->logger->error('Error while parsing CSV: ' . $e->getMessage());
        }
        return [];
    }

    public function setSpreadsheetUrl(string $spreadsheetUrl): void
    {
        $this->spreadsheetUrl = $spreadsheetUrl;
    }

    /**
     * @throws TransportExceptionInterface
     * @throws ServerExceptionInterface
     * @throws RedirectionExceptionInterface
     * @throws ClientExceptionInterface
     */
    private function getDataFromGoogleSheets(): string
    {
        try{
            $response = $this->client->request('GET', $this->spreadsheetUrl);
            return $response->getContent();
        } catch (TransportExceptionInterface $e) {
            $this->logger->error('Error while fetching data from Google Sheets: ' . $e->getMessage());
        }
        return '';
    }
}