/**
 * Prompts Module — Mapa de prompts padrao por tipo de documento.
 *
 * Portado de `mapa_prompts.txt` (PGE-PE). As chaves sao os "Tipo de documento"
 * como aparecem nos cards de `pd-manifestacao` no Attus. Quando o usuario
 * clicar no botao IA de um card especifico, o sidepanel recebe o tipo textual
 * e utiliza `findPromptByTipo` para resolver o prompt padrao.
 *
 * O usuario mantem o direito de:
 *   - trocar o tipo via dropdown
 *   - editar o textarea do prompt carregado
 */

/** @type {Record<string, string>} */
export const PROMPTS = {
  "Agravo Art. 557 § 1º / 545, CPC":
    "Com base na íntegra do processo e nos subsídios fornecidos pelos órgãos públicos envolvidos, elabore manifestação de agravo, nos termos do art. 557, §1º, ou art. 545 do CPC, demonstrando a necessidade de reforma da decisão monocrática que causou prejuízo ao Estado de Pernambuco.",
  "Agravo de Instrumento":
    "Elabore um agravo de instrumento estruturado em nome da entidade da fazenda pública ESTADUAL que está no polo passivo, em face da decisão que concedeu a medida liminar, demonstrando claramente o preenchimento dos requisitos de admissibilidade, a relevância das razões recursais e a necessidade de reforma da decisão interlocutória, com fundamento na legislação aplicável, inclusive abordando as vedações legais para a concessão de liminares em face da fazenda pública.",
  "Apelação":
    "Elabore recurso de apelação detalhado em nome da entidade da fazenda pública ESTADUAL que está no polo passivo. O objeto do recurso será a parte da sentença que for desfavorável à fazenda pública, aborde explicitando os erros na sentença impugnada e apresentando razões jurídicas para reforma ou anulação da decisão, fundamentadas na legislação aplicável. Faça primeiro a peça de interposição e depois as razões recursais.",
  "Embargos de Declaração":
    "Elabore embargos de declaração, com base na decisão judicial e nos autos, para sanar omissão, obscuridade ou contradição, com vistas à defesa adequada dos interesses do Estado de Pernambuco.",
  "Recurso Especial":
    "Redija um requerimento de dispensa de apresentação de recurso especial e/ou extraordinário, com estrutura formal dividida em quatro partes: (1) Endereçamento: direcionado ao Procurador-Chefe, com indicação completa dos dados do processo; (2) Resumo da Demanda: Do que se trata a ação com Resumo dos pedidos; (3) Razões para não interposição de Recurso: elabore texto objetivo e técnico demonstrando que o recurso especial ou extraordinário não reúne os requisitos para admissão, mencionando expressamente causas de inadmissibilidade como ausência de repercussão geral (RE), ausência de prequestionamento (Súmulas 282 e 356/STF, 211/STJ), incidência das Súmulas 7/STJ e 279/STF (necessidade de reexame de fatos), ofensa reflexa ou indireta à Constituição, contrariedade inexistente à legislação federal ou constitucional, deficiência de fundamentação (Súmula 284/STF), além da majoração dos honorários advocatícios com base no art. 85, §11, do CPC, caso o recurso seja desprovido (4) Pedidos: requerer autorização para não interpor os recursos cabíveis.",
  "Recurso Extraordinário":
    "Redija um requerimento de dispensa de apresentação de recurso especial e/ou extraordinário, com estrutura formal dividida em quatro partes: (1) Endereçamento: direcionado ao Procurador-Chefe, com indicação completa dos dados do processo; (2) Resumo da Demanda: Do que se trata a ação com Resumo dos pedidos; (3) Razões para não interposição de Recurso: elabore texto objetivo e técnico demonstrando que o recurso especial ou extraordinário não reúne os requisitos para admissão, mencionando expressamente causas de inadmissibilidade como ausência de repercussão geral (RE), ausência de prequestionamento (Súmulas 282 e 356/STF, 211/STJ), incidência das Súmulas 7/STJ e 279/STF (necessidade de reexame de fatos), ofensa reflexa ou indireta à Constituição, contrariedade inexistente à legislação federal ou constitucional, deficiência de fundamentação (Súmula 284/STF), além da majoração dos honorários advocatícios com base no art. 85, §11, do CPC, caso o recurso seja desprovido (4) Pedidos: requerer autorização para não interpor os recursos cabíveis.",
  "Contestação":
    "Elabore uma contestação em nome da(s) entidade(s) da fazenda pública ESTADUAL que está(ão) no polo passivo da petição inicial, abordando claramente as preliminares cabíveis e o mérito da demanda, refutando ponto a ponto os argumentos da parte contrária com embasamento jurídico sólido. Para conhecimento, no que for aplicável ao caso, segue a legislação pertinente: Art. 336. Incumbe ao réu alegar, na contestação, toda a matéria de defesa, expondo as razões de fato e de direito com que impugna o pedido do autor e especificando as provas que pretende produzir. Art. 337. Incumbe ao réu, antes de discutir o mérito, alegar: I - inexistência ou nulidade da citação; II - incompetência absoluta e relativa; III - incorreção do valor da causa; IV - inépcia da petição inicial; V - perempção; VI - litispendência; VII - coisa julgada; VIII - conexão; IX - incapacidade da parte, defeito de representação ou falta de autorização; X - convenção de arbitragem; XI - ausência de legitimidade ou de interesse processual. Só crie os tópicos das matérias de alegações encontradas no caso prático. Quanto ao pedido de produção de provas, insira apenas o pedido genérico de produção de todos os meios necessários, sem especificá-los.",
  "Informações MS":
    "Elabore uma manifestação, com base no Art. 9 da LEI Nº 12.016/09, em mandado de segurança, em nome  do Estado de Pernambuco, defendendo a legalidade do ato impugnado, abordando claramente as preliminares cabíveis e o mérito da demanda, refutando ponto a ponto os argumentos da parte contrária com embasamento jurídico sólido. Para conhecimento, no que for aplicável ao caso, segue a legislação pertinente: Art. 336. Incumbe ao réu alegar, na contestação, toda a matéria de defesa, expondo as razões de fato e de direito com que impugna o pedido do autor e especificando as provas que pretende produzir. Art. 337. Incumbe ao réu, antes de discutir o mérito, alegar: I - inexistência ou nulidade da citação; II - incompetência absoluta e relativa; III - incorreção do valor da causa; IV - inépcia da petição inicial; V - perempção; VI - litispendência; VII - coisa julgada; VIII - conexão; IX - incapacidade da parte, defeito de representação ou falta de autorização; X - convenção de arbitragem; XI - ausência de legitimidade ou de interesse processual. Só crie os tópicos das matérias de alegações encontradas no caso prático. Quanto ao pedido de produção de provas, insira apenas o pedido genérico de produção de todos os meios necessários, sem especificá-los.",
  "Embargos à execução":
    "Analise o título executivo e os documentos juntados e elabore embargos à execução, demonstrando a nulidade, inexigibilidade ou excesso de execução, conforme o interesse do Estado.",
  "Alegações finais":
    "Elabore uma peça processual de alegações finais detalhado em nome da entidade da fazenda pública ESTADUAL que está no polo passivo, de forma clara e estruturada, recapitulando objetivamente a tese de defesa apresentada pela fazenda pública, destacando argumentos jurídicos sólidos para reforçar a tese defensiva, e concluindo com requerimento expresso para improcedência total da demanda, conforme as provas e legislação aplicáveis.",
  "Contrarrazões de recurso":
    "Elabore uma peça processual de Contrarrazões ao Recurso interposto pela parte recorrente, em nome da entidade da fazenda pública estadual que está como recorrida. Analise o arquivo PDF fornecido, identifique os fatos relevantes do processo e os fundamentos apresentados no Recurso Interposto pela parte recorrente, faça um resumo claro dos argumentos recursais e desenvolva uma defesa técnica, rebatendo de forma objetiva cada ponto. Estruture a fundamentação de forma clara, destacando a ausência de razão do recorrente e a correção da parte da decisão atacada que foi favorável a fazenda pública recorrida. Nos pedidos, requeira o não conhecimento do recurso apenas no caso de existirem preliminares de inadmissibilidade (como intempestividade, ausência de preparo ou deserção) e, no mérito, requeira o desprovimento do recurso, mantendo-se a decisão recorrida no que for favorável à fazenda pública, além da condenação da parte recorrente nas verbas sucumbenciais, se cabível.",
  "Manifestação em 72h":
    "Analise o processo e elabore, em nome da entidade da fazenda pública ESTADUAL que está no polo passivo, uma manifestação prévia em face do pedido liminar formulado pela parte demandante. A peça deve trazer elementos capazes de afastar a concessão da liminar por ausência dos requisitos legais. Deve ainda tratar sobre as vedações legais existentes para a concessão de liminares em face da fazenda pública.",
  "Manifestação em 48h":
    "Analise o processo e elabore, em nome da entidade da fazenda pública ESTADUAL que está no polo passivo, uma manifestação prévia em face do pedido liminar formulado pela parte demandante. A peça deve trazer elementos capazes de afastar a concessão da liminar por ausência dos requisitos legais. Deve ainda tratar sobre as vedações legais existentes para a concessão de liminares em face da fazenda pública.",
  "Solicitação de Disp.Rec/Manif.":
    "Redija um requerimento bastante sucinto de dispensa da manifestação processual sugerida, com estrutura formal dividida em quatro partes: (1) Endereçamento: direcionado ao Procurador-Chefe, com indicação completa dos dados do processo; (2) Resumo da Demanda: Do que se trata a ação com Resumo dos pedidos; (3) Razões para não interposição de Recurso: elabore texto objetivo e técnico demonstrando que a manifestação processual sugerida não é recomendada e seria contraproducente (4) Pedidos: requerer autorização para não interpor a manifestação cabível.",
  "Manifestação prévia":
    "Analise o processo e elabore, em nome da entidade da fazenda pública ESTADUAL que está no polo passivo, uma manifestação prévia em face do pedido liminar formulado pela parte demandante. A peça deve trazer elementos capazes de afastar a concessão da liminar por ausência dos requisitos legais. Deve ainda tratar sobre as vedações legais existentes para a concessão de liminares em face da fazenda pública.",
  "Agravo Art. 544 CPC":
    "Com base nos autos e na negativa de seguimento do recurso especial ou extraordinário, elabore agravo nos moldes do art. 544 do CPC, demonstrando os pressupostos de admissibilidade e a relevância jurídica da tese.",
  "Agravo Art. 544 CPC - REsp":
    "Elabore agravo para destrancar o Recurso Especial com fundamento no art. 544 do CPC, demonstrando a relevância do direito federal infraconstitucional em discussão.",
  "Agravo Art. 544 CPC - RE":
    "Elabore agravo com base no art. 544 do CPC visando a admissibilidade do Recurso Extraordinário, com destaque para a violação direta à Constituição Federal.",
  "Solicitação de Validação de Cálculos":
    "Elabore solicitação de validação de cálculos para o setor técnico, com base nos critérios definidos nos autos e na legislação aplicável.",
  "Recurso Inominado":
    "Elabore recurso inominado detalhado em nome da entidade da fazenda pública estadual que está no polo passivo. O objeto do recurso será a parte da sentença que for desfavorável à fazenda pública, aborde explicitando os erros na sentença impugnada e apresentando razões jurídicas para reforma ou anulação da decisão, fundamentadas na legislação aplicável. Faça primeiro a peça de interposição e depois as razões recursais.",
  "Solicitação de Elaboração de Ofícios":
    "Redija solicitação dirigida ao setor de ofícios requerendo a elaboração de ofícios para cumprimento de diligências judiciais ou administrativas, com base na necessidade identificada nos autos.",
  "Contrarrazões de recurso em RE.":
    "Elabore uma peça processual de Contrarrazões ao Recurso Especial e/ou Extraordinário interposto pela parte recorrente, em nome da entidade da fazenda pública estadual que está como recorrida, adotando tom jurídico formal e firme, com estrutura argumentativa clara e objetiva. Inicie com a contextualização do processo e breve resumo do acórdão recorrido, destacando a ausência de violação direta à Constituição Federal (no caso do recurso extraordinário) ou a inexistência de interpretação divergente ou violação literal a dispositivo federal (no caso do recurso especial). Reforce que a decisão impugnada está devidamente fundamentada, não havendo ofensa aos artigos 489, §1º, e 1.022 do CPC. Em seguida, aborde os principais óbices ao conhecimento do recurso, indicando de forma articulada e técnica as razões que impedem sua admissibilidade: ausência de prequestionamento, incidência das Súmulas 7/STJ e 279/STF (reexame de fatos e provas), falta de demonstração da repercussão geral, deficiência de fundamentação, existência de jurisprudência pacífica contrária à tese recursal, bem como eventual intempestividade ou vício formal. No mérito, reafirme os fundamentos do acórdão recorrido, demonstrando sua consonância com a jurisprudência dominante dos Tribunais Superiores. Finalize requerendo o não conhecimento dos recursos, subsidiariamente, o desprovimento, com eventual aplicação de multa por caráter manifestamente protelatório, nos termos do art. 1.026, §2º, do CPC, se cabível.",
  "Contrarrazões de recurso em REsp.":
    "Elabore uma peça processual de Contrarrazões ao Recurso Especial e/ou Extraordinário interposto pela parte recorrente, em nome da entidade da fazenda pública estadual que está como recorrida, adotando tom jurídico formal e firme, com estrutura argumentativa clara e objetiva. Inicie com a contextualização do processo e breve resumo do acórdão recorrido, destacando a ausência de violação direta à Constituição Federal (no caso do recurso extraordinário) ou a inexistência de interpretação divergente ou violação literal a dispositivo federal (no caso do recurso especial). Reforce que a decisão impugnada está devidamente fundamentada, não havendo ofensa aos artigos 489, §1º, e 1.022 do CPC. Em seguida, aborde os principais óbices ao conhecimento do recurso, indicando de forma articulada e técnica as razões que impedem sua admissibilidade: ausência de prequestionamento, incidência das Súmulas 7/STJ e 279/STF (reexame de fatos e provas), falta de demonstração da repercussão geral, deficiência de fundamentação, existência de jurisprudência pacífica contrária à tese recursal, bem como eventual intempestividade ou vício formal. No mérito, reafirme os fundamentos do acórdão recorrido, demonstrando sua consonância com a jurisprudência dominante dos Tribunais Superiores. Finalize requerendo o não conhecimento dos recursos, subsidiariamente, o desprovimento, com eventual aplicação de multa por caráter manifestamente protelatório, nos termos do art. 1.026, §2º, do CPC, se cabível.",
  "Contrarrazões em Recursos REsp/RE.":
    "Elabore uma peça processual de Contrarrazões ao Recurso Especial e/ou Extraordinário interposto pela parte recorrente, em nome da entidade da fazenda pública estadual que está como recorrida, adotando tom jurídico formal e firme, com estrutura argumentativa clara e objetiva. Inicie com a contextualização do processo e breve resumo do acórdão recorrido, destacando a ausência de violação direta à Constituição Federal (no caso do recurso extraordinário) ou a inexistência de interpretação divergente ou violação literal a dispositivo federal (no caso do recurso especial). Reforce que a decisão impugnada está devidamente fundamentada, não havendo ofensa aos artigos 489, §1º, e 1.022 do CPC. Em seguida, aborde os principais óbices ao conhecimento do recurso, indicando de forma articulada e técnica as razões que impedem sua admissibilidade: ausência de prequestionamento, incidência das Súmulas 7/STJ e 279/STF (reexame de fatos e provas), falta de demonstração da repercussão geral, deficiência de fundamentação, existência de jurisprudência pacífica contrária à tese recursal, bem como eventual intempestividade ou vício formal. No mérito, reafirme os fundamentos do acórdão recorrido, demonstrando sua consonância com a jurisprudência dominante dos Tribunais Superiores. Finalize requerendo o não conhecimento dos recursos, subsidiariamente, o desprovimento, com eventual aplicação de multa por caráter manifestamente protelatório, nos termos do art. 1.026, §2º, do CPC, se cabível.",
  "Impugnação ao Cumprimento de Sentença":
    "Elabore impugnação ao cumprimento de sentença com base nos elementos do processo e nos cálculos apresentados, apontando eventuais vícios, excesso de execução ou nulidades processuais.",
  "Agravo Trib. Sup. Art.1.030 §¹º c/c 1.042 CPC Resp":
    "Com base na decisão denegatória de admissibilidade do recurso especial, elabore pedido de dispensa de recurso de agravo interno para os tribunais superiores, nos termos dos arts. 1.030 §1º e 1.042 do CPC, demonstrando a ausência de interesse recursal e a baixa probabilidade de êxito do recurso. Além da possibilidade de majoração dos honorários.",
  "Agravo Trib. Sup. Art.1.030 5'º, c/c 1.042 CPC RE":
    "Com base na decisão denegatória de admissibilidade do recurso especial, elabore pedido de dispensa de recurso de agravo interno para os tribunais superiores, nos termos dos arts. 1.030 §1º e 1.042 do CPC, demonstrando a ausência de interesse recursal e a baixa probabilidade de êxito do recurso. Além da possibilidade de majoração dos honorários.",
  "Parecer de Não Interposição de Recurso/Medida Judicial":
    "Com base na análise jurídica do caso concreto, elabore parecer técnico fundamentado indicando a desnecessidade ou inadequação da interposição de recurso ou medida judicial, alinhado às diretrizes institucionais da PGE-PE.",
  "Petições diversas":
    "Elabore em nome da(s) entidade(s) da fazenda pública ESTADUAL que está(ão) no polo passivo uma manifestação genérica respondendo à última decisão judicial proferida nos autos.",
};

/**
 * Normaliza uma string de tipo para matching insensivel a acentos/caixa.
 * @param {string} s
 * @returns {string}
 */
export function normalizeTipoKey(s) {
  return (s || "")
    .toString()
    .normalize("NFD")
    .replace(/[\u0300-\u036f]/g, "")
    .toLowerCase()
    .replace(/[^a-z0-9\s]/g, " ")
    .replace(/\s+/g, " ")
    .trim();
}

/**
 * Busca o prompt padrao para um tipo de documento informado.
 * Estratégia:
 *   1. match exato (case-sensitive)
 *   2. match normalizado (sem acentos/caixa/pontuacao)
 *   3. match por inclusao de palavra-chave (ex: "Contestação Comum" -> "Contestação")
 *
 * @param {string} tipoDocumento — texto bruto do card (ex: "Contestação", "Agravo de Instrumento")
 * @returns {{key: string, prompt: string}|null}
 */
export function findPromptByTipo(tipoDocumento) {
  if (!tipoDocumento) return null;
  // 1. Exato
  if (PROMPTS[tipoDocumento]) {
    return { key: tipoDocumento, prompt: PROMPTS[tipoDocumento] };
  }
  // 2. Normalizado
  const target = normalizeTipoKey(tipoDocumento);
  if (!target) return null;
  for (const [key, prompt] of Object.entries(PROMPTS)) {
    if (normalizeTipoKey(key) === target) return { key, prompt };
  }
  // 3. Match por substring / palavras-chave
  const targetTokens = target.split(" ").filter(t => t.length >= 4);
  let best = null;
  let bestScore = 0;
  for (const [key, prompt] of Object.entries(PROMPTS)) {
    const keyNorm = normalizeTipoKey(key);
    const keyTokens = keyNorm.split(" ").filter(t => t.length >= 4);
    let score = 0;
    for (const tk of targetTokens) {
      if (keyNorm.includes(tk)) score += 2;
    }
    for (const kk of keyTokens) {
      if (target.includes(kk)) score += 1;
    }
    // Bonus: inclusao total
    if (keyNorm.includes(target) || target.includes(keyNorm)) score += 5;
    if (score > bestScore) { bestScore = score; best = { key, prompt }; }
  }
  return bestScore >= 2 ? best : null;
}

/**
 * Retorna a lista de tipos para popular o dropdown do sidepanel.
 * Inclui uma opcao "Outra (prompt livre)" no final.
 * @returns {Array<{id: string, label: string}>}
 */
export function listTiposPeca() {
  const keys = Object.keys(PROMPTS);
  const tipos = keys.map(k => ({ id: k, label: k }));
  tipos.push({ id: "__outra__", label: "Outra (prompt livre)" });
  return tipos;
}
