'use client';

/**
 * Controle documental — `/projetos/[id]/software/controle-documental` (DOC-TEC-125).
 */

import {
    ProjetoSoftwareDocTecFormScreen,
} from '@/features/projetos/projeto-software-doc-tec-form/ProjetoSoftwareDocTecFormScreen';
import { TIPOLOGICO_EMPTY_DOMAIN } from '@/features/projetos/projeto-tipologico-empty-state';
import type { Projeto } from '@/types';

function raciToString(value: Projeto['raci_json']): string {
    if (value == null) return '';
    if (typeof value === 'string') return value;
    try {
        return JSON.stringify(value, null, 2);
    } catch {
        return '';
    }
}

function pickInitialValues(projeto: Projeto | undefined) {
    return {
        doc_versao: projeto?.doc_versao ?? '',
        doc_aprovado_por: projeto?.doc_aprovado_por ?? '',
        doc_classificacao: projeto?.doc_classificacao ?? '',
        doc_changelog: projeto?.doc_changelog ?? '',
        raci_json: raciToString(projeto?.raci_json),
    };
}

export function ProjetoSoftwareControleDocumentalScreen() {
    return (
        <ProjetoSoftwareDocTecFormScreen
            pageTitle="Controle documental"
            pageIcon="file-contract"
            titleSection="Controle documental"
            guardKey="controle-documental"
            emptyTitle="Controle documental ainda vazio"
            emptyDomainDescription={TIPOLOGICO_EMPTY_DOMAIN.controleDocumental}
            successMessage="Controle documental salvo com sucesso!"
            data-testid="projeto-controle-documental"
            fields={[
                {
                    name: 'doc_versao',
                    label: 'Versão do documento',
                    kind: 'input',
                    placeholder: 'ex.: 1.2.0',
                    maxLength: 64,
                },
                {
                    name: 'doc_aprovado_por',
                    label: 'Aprovado por',
                    kind: 'input',
                    placeholder: 'Nome ou papel do aprovador',
                    maxLength: 255,
                },
                {
                    name: 'doc_classificacao',
                    label: 'Classificação',
                    kind: 'input',
                    placeholder: 'ex.: interno, cliente, confidencial',
                    maxLength: 128,
                },
                {
                    name: 'doc_changelog',
                    label: 'Changelog resumido',
                    placeholder: 'Resumo das alterações desta versão…',
                    rows: 8,
                    maxLength: 10000,
                },
                {
                    name: 'raci_json',
                    label: 'Matriz RACI (JSON)',
                    placeholder:
                        '[{"papel":"PO","pessoa":"…","raci":"A"}, …] — opcional; sincronizável via OWNERSHIP.',
                    rows: 10,
                    maxLength: 50000,
                },
            ]}
            pickInitialValues={pickInitialValues}
            buildPayload={(values) => ({
                doc_versao: values.doc_versao?.trim() || null,
                doc_aprovado_por: values.doc_aprovado_por?.trim() || null,
                doc_classificacao: values.doc_classificacao?.trim() || null,
                doc_changelog: values.doc_changelog?.trim() || null,
                raci_json: values.raci_json?.trim() || null,
            })}
            isEmpty={(p) =>
                !String(p?.doc_versao ?? '').trim() &&
                !String(p?.doc_aprovado_por ?? '').trim() &&
                !String(p?.doc_classificacao ?? '').trim() &&
                !String(p?.doc_changelog ?? '').trim() &&
                !raciToString(p?.raci_json).trim()
            }
        />
    );
}
