import { patterns } from './core.js';
/**
 * Detects third-party data processors from codebase file contents.
 * Searches for known SDK signatures from pii-patterns.json.
 */
export function detectThirdParties(codebaseFiles) {
    const found = [];
    const seen = new Set();
    for (const fileContent of codebaseFiles) {
        const lower = fileContent.toLowerCase();
        for (const [type, signatures] of Object.entries(patterns.thirdPartySignatures)) {
            for (const signature of signatures) {
                if (lower.includes(signature.toLowerCase())) {
                    /* v8 ignore start */
                    const destination = signature.replace(/^@/, '').replace(/\./g, '-').split('/')[0] ?? signature;
                    /* v8 ignore stop */
                    if (seen.has(destination)) {
                        continue;
                    }
                    seen.add(destination);
                    found.push({
                        destination,
                        destinationType: type,
                        dataShared: [],
                        hasDPA: false,
                        isMinimized: false,
                        restrictedRegions: [],
                        requiresDPAReview: true,
                    });
                }
            }
        }
    }
    return found;
}
/**
 * Generates a privacy section for a spec's HU.md given a PIIDetectionResult.
 */
export function generatePrivacySection(result, framework, retentionPolicy) {
    if (!result.hasPII) {
        return [];
    }
    const lines = [
        '',
        '## Privacidad y Datos',
        '',
        '> **Nota**: estos criterios son orientativos y deben ser revisados por el equipo legal.',
        '',
        '### Clasificacion de datos personales detectados',
        '',
    ];
    for (const field of result.fields) {
        const sensitivity = field.isSensitiveSpecial ? ' (GDPR Art. 9 — categoria especial)' : '';
        lines.push(`- **${field.fieldName}** — categoria: \`${field.category}\`${sensitivity}, contexto: \`${field.modelContext}\``);
    }
    lines.push('');
    lines.push(`### Marco legal aplicable: ${framework}`);
    lines.push('');
    lines.push(`- **Base legal recomendada**: \`${result.recommendedLegalBasis}\``);
    /* v8 ignore start */
    lines.push(`- **Periodo de retencion**: ${retentionPolicy.retentionPeriodDays === -1 ? 'indefinido (requiere justificacion)' : `${retentionPolicy.retentionPeriodDays} dias`}`);
    /* v8 ignore stop */
    lines.push(`- **Tipo de eliminacion**: \`${retentionPolicy.deletionType}\``);
    lines.push(`- **Sistemas de propagacion**: ${retentionPolicy.propagationSystems.join(', ')}`);
    lines.push('');
    lines.push('### Criterios de privacidad');
    lines.push('');
    if (result.requiresConsentFlow) {
        lines.push('- [ ] El usuario da consentimiento explicito (opt-in) para cada proposito de procesamiento');
        lines.push('- [ ] El consentimiento es granular — no se acepta "acepto todo"');
        lines.push('- [ ] El consentimiento es revocable en cualquier momento');
    }
    lines.push(`- [ ] Los datos personales se eliminan despues de ${retentionPolicy.retentionPeriodDays} dias o ante solicitud del usuario`);
    lines.push(`- [ ] La eliminacion es ${retentionPolicy.deletionType} y se propaga a: ${retentionPolicy.propagationSystems.join(', ')}`);
    if (result.requiresAuditTrail) {
        lines.push('- [ ] Cada acceso a datos personales se registra con: usuario, timestamp, IP/servicio, proposito');
        lines.push('- [ ] El log de acceso es inmutable y se retiene minimo 365 dias');
    }
    if (result.requiresRightToErasure) {
        lines.push('- [ ] Se implementa el "derecho al olvido": flujo de eliminacion que cubre todos los sistemas');
    }
    if (result.sensitiveSpecialCount > 0) {
        lines.push('');
        lines.push('### Categorias especiales (GDPR Art. 9)');
        lines.push('');
        lines.push('- [ ] Los campos de categoria especial solo se procesan con consentimiento explicito');
        lines.push('- [ ] Los campos de categoria especial NO pueden basarse en "interes legitimo"');
        lines.push('- [ ] Se documenta la necesidad de procesar datos de categoria especial y la base legal adicional');
    }
    lines.push('');
    lines.push('_Los criterios de privacidad generados son recomendaciones — el equipo legal es responsable de la decision final._');
    return lines;
}
/**
 * Builds a default ProjectPrivacyConfig from a detected framework.
 */
export function buildDefaultPrivacyConfig(framework, dataProcessors) {
    const frameworkKey = framework === 'custom' ? 'GDPR' : framework;
    const config = patterns.frameworks[frameworkKey];
    return {
        framework,
        /* v8 ignore start */
        defaultRetentionDays: config?.defaultRetentionDays ?? 730,
        auditRetentionDays: config?.auditRetentionDays ?? 365,
        /* v8 ignore stop */
        dataProcessors,
    };
}
/**
 * Returns the framework config for a given PrivacyFramework key.
 * Used by tests and tool handlers.
 */
export function getFrameworkConfig(framework) {
    const key = framework === 'custom' ? 'GDPR' : framework;
    /* v8 ignore start */
    return patterns.frameworks[key] ?? null;
    /* v8 ignore stop */
}
//# sourceMappingURL=formatters.js.map