import { Document, parseDocument } from 'yaml';
import { ConversorBase } from '../converter-base.js';
export class ConversorGhaToGitlab extends ConversorBase {
    de = 'github-actions';
    para = 'gitlab-ci';
    async converter(conteudo) {
        const avisos = [];
        const erros = [];
        try {
            const doc = parseDocument(conteudo);
            if (doc.errors.length > 0) {
                throw new Error(doc.errors[0].message);
            }
            const gha = doc.toJS();
            const gitlab = {
                stages: []
            };
            if (gha.env) {
                gitlab.variables = gha.env;
            }
            if (gha.jobs) {
                const jobs = gha.jobs;
                const jobsEntries = Object.entries(jobs);
                const stagesSet = new Set();
                for (const [jobId, jobData] of jobsEntries) {
                    const job = jobData;
                    const gitlabJob = {
                        stage: (job.name ?? jobId).toLowerCase(),
                        script: []
                    };
                    stagesSet.add(gitlabJob.stage);
                    if (job['runs-on']) {
                        avisos.push(`Job '${jobId}': Mapeamento de 'runs-on: ${job['runs-on']}' para image do GitLab pode exigir ajuste manual.`);
                        if (String(job['runs-on']).includes('ubuntu')) {
                            gitlabJob.image = 'ubuntu:latest';
                        }
                    }
                    if (job.steps && Array.isArray(job.steps)) {
                        const steps = job.steps;
                        for (const step of steps) {
                            if (step.run) {
                                const cmd = String(step.run).trim();
                                gitlabJob.script.push(cmd);
                            }
                            else if (step.uses) {
                                if (step.uses.includes('actions/checkout')) {
                                    gitlabJob.script.push('# Checkout automático pelo GitLab Runner');
                                }
                                else {
                                    avisos.push(`Job '${jobId}': Action '${step.uses}' detectada. Considere usar um componente equivalente do GitLab ou um script customizado.`);
                                    gitlabJob.script.push(`# TODO: Implementar lógica da action: ${step.uses}`);
                                }
                            }
                        }
                    }
                    if (job.needs) {
                        gitlabJob.needs = Array.isArray(job.needs) ? job.needs : [job.needs];
                    }
                    gitlab[jobId] = gitlabJob;
                }
                gitlab.stages = Array.from(stagesSet);
            }
            const outputDoc = new Document(gitlab);
            return this.criarResultado(outputDoc.toString(), avisos, erros);
        }
        catch (err) {
            const msg = err instanceof Error ? err.message : String(err);
            return this.criarResultado('', [], [`Falha na conversão: ${msg}`]);
        }
    }
}
//# sourceMappingURL=converter-gha-to-gitlab.js.map