<?php

namespace App\Services;

use App\Models\Submission;
use Illuminate\Support\Collection;

class CsvExportService
{
    /**
     * Export CSV para Contabilidade (campos limitados).
     */
    public static function exportContabilidade(Collection $submissions): string
    {
        $headers = ['Nome Completo', 'NIF', 'Data Nascimento', 'Estado Civil', 'N.º Dependentes', 'Morada', 'Habilitações Literárias'];

        $rows = $submissions->map(function (Submission $s) {
            return [
                $s->nome_completo,
                $s->nif,
                $s->data_nascimento->format('Y-m-d'),
                $s->estado_civil_label,
                $s->nr_dependentes,
                $s->morada_final,
                $s->habilitacoes_label,
            ];
        });

        return self::buildCsv($headers, $rows);
    }

    /**
     * Export CSV para ERP (todos os campos).
     */
    public static function exportErp(Collection $submissions): string
    {
        $headers = [
            'Nome Completo', 'NIF', 'Data Nascimento', 'Email', 'Telemóvel',
            'Contacto Emergência (Nome)', 'Contacto Emergência (Relação)', 'Contacto Emergência (Telefone)',
            'Morada', 'Mudou Morada', 'Estado Civil', 'N.º Dependentes', 'Habilitações Literárias',
            'Estado', 'Data Submissão',
        ];

        $rows = $submissions->map(function (Submission $s) {
            return [
                $s->nome_completo,
                $s->nif,
                $s->data_nascimento->format('Y-m-d'),
                $s->email,
                $s->telemovel,
                $s->contacto_emergencia_nome,
                $s->contacto_emergencia_relacao,
                $s->contacto_emergencia_telefone,
                $s->morada_final,
                $s->mudou_morada ? 'Sim' : 'Não',
                $s->estado_civil_label,
                $s->nr_dependentes,
                $s->habilitacoes_label,
                $s->status_label,
                $s->created_at->format('Y-m-d H:i'),
            ];
        });

        return self::buildCsv($headers, $rows);
    }

    /**
     * Construir CSV com BOM para Excel PT.
     */
    private static function buildCsv(array $headers, Collection $rows): string
    {
        $output = fopen('php://temp', 'r+');

        // BOM para UTF-8 no Excel
        fwrite($output, "\xEF\xBB\xBF");

        fputcsv($output, $headers, ';');

        foreach ($rows as $row) {
            fputcsv($output, $row, ';');
        }

        rewind($output);
        $csv = stream_get_contents($output);
        fclose($output);

        return $csv;
    }
}
