<?php

namespace App\Services\Reports;

use App\Models\SavedReport;
use App\Models\User;
use App\Services\Forms\FormSubmissionExportService;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\StreamedResponse;

class SavedReportRunner
{
    public function __construct(
        protected FormSubmissionExportService $formExport
    ) {}

    public function run(SavedReport $report, User $user): StreamedResponse
    {
        $filters = $report->filters ?? [];
        $controller = app(\App\Http\Controllers\Web\ReportsController::class);
        $request = Request::create('/', 'GET', $filters);

        return match ($report->report_key) {
            'form_submissions' => $this->formExport->streamCsv(
                $user->company_id,
                isset($filters['form_id']) ? (int) $filters['form_id'] : null,
                isset($filters['days']) ? (int) $filters['days'] : null
            ),
            'expenses' => $controller->exportExpenses($request),
            'audit_export' => $controller->exportAudit($request),
            'performance' => $controller->exportPerformance($request),
            default => abort(422, 'Unsupported report type: ' . $report->report_key),
        };
    }
}
