<?php

namespace Easymailing\App\Controller\Admin;

use Easymailing\App\Core\Http\Request;

class LogController extends BaseSynchronizationController
{
	public function indexAction()
	{
		$this->checkConfig();
		$this->checkGeneralData();

		$repository = $this->getContainer()->get('config_repository');
		$synchronizationConfig = $this->getSynchronizationConfig();
		$request = $this->getRequest();

		if ($request->getMethod() === Request::METHOD_POST) {
			// Verificar acción de formulario
			if ($request->request->get('action') === 'easymailing_log_action') {
				$synchronizationConfig->setEnableLogs(!$synchronizationConfig->isEnableLogs());
				$repository->saveSynchronizationConfig($synchronizationConfig);
			} elseif ($request->request->get('action') === 'delete_logs') {
				$this->deleteAllLogs();
			}elseif ($request->request->get('action') === 'download_logs') {
				$this->downloadLogs();
			}else{
				wp_die();
			}
		}

		$logs = [];
		$paged = (int) ($request->query->get('paged') ?? 1);
		$logsPerPage = 100;

		if ($synchronizationConfig->isEnableLogs()) {
			$logManager = $this->getContainer()->get('log_manager');

			// Calculamos el offset
			$offset = ($paged - 1) * $logsPerPage;

			// Obtenemos los logs con límite y offset
			$logs = $logManager->getPaginatedLogs($logsPerPage, $offset);
			$totalLogs = $logManager->getTotalLogCount();
		}

		$this->render('Admin/Synchronization/logs.php', [
			'current_page' => 4,
			'paged' => $paged,
			'logs_per_page' => $logsPerPage,
			'total_logs' => $totalLogs ?? 0,
			'logs' => $logs,
			'synchronizationConfig' => $synchronizationConfig,
		]);
	}


	private function deleteAllLogs(): void
	{
		$logManager = $this->getContainer()->get('log_manager');
		$logManager->deleteAllLogs();
	}

	private function downloadLogs(): void
	{
		$logManager = $this->getContainer()->get('log_manager');
		$logFile = $logManager->generateLogFile(); // Genera el archivo temporal

		if (!file_exists($logFile)) {
			$this->addFlash('error', __('El archivo de logs no se pudo generar.', 'easymailing'));
			return;
		}

		// Limpia cualquier salida previa
		if (ob_get_level()) {
			ob_end_clean();
		}

		// Forzar la descarga del archivo CSV
		header('Content-Type: text/csv; charset=UTF-8');
		header('Content-Disposition: attachment; filename="' . basename($logFile) . '"');
		header('Content-Length: ' . filesize($logFile));
		header('Cache-Control: no-cache, no-store, must-revalidate');
		header('Pragma: no-cache');
		header('Expires: 0');

		// Leer y enviar el contenido del archivo al navegador
		readfile($logFile);

		// Eliminar el archivo temporal tras la descarga
		unlink($logFile);

		// Detener la ejecución
		exit;
	}

}
