"""Monta testar_suellen.py reaproveitando o DOM falso do teste do protótipo da Fer.

Para conferir a coerência entre os protótipos, o teste também lê (só leitura) o estoque dos insumos do copiloto da
Fer, que faz a gestão do estoque (Luiz, 07/10/2026)."""
from pathlib import Path

AQUI = Path(__file__).resolve().parent
base = (AQUI / 'testar_prototipo.py').read_text(encoding='utf-8')
shim = base[base.index("SHIM = r'''"):base.index("TESTES = r'''")]
shim = shim.replace(
    "var CONHECIDOS = ['tela', 'horaTopo', 'horaIphone', 'painel', 'veu', 'toast', 'botaoTema', 'telaApp'];",
    "var CONHECIDOS = ['tela', 'horaTopo', 'horaAparelho', 'painel', 'veu', 'toast', 'botaoTema', 'telaApp', 'botaoGirar', 'textoPrevia'];")
shim = shim.replace('var window = globalThis;', 'var window = globalThis;\nwindow.innerWidth = 1440;\nwindow.innerHeight = 900;')
assert 'botaoGirar' in shim and 'innerWidth' in shim

CABECA = '''"""Roda o JavaScript do copiloto da Dra. Suellen num DOM falso e exercita telas e ações."""
import json
import re
import sys

import quickjs

html = open(sys.argv[1], encoding='utf-8').read()
script = re.findall(r'<script>(.*?)</script>', html, re.S)[0]
fim = script.rfind('})();')
exporta = ('\\nglobalThis.__t = { get estado() { return estado; }, ACOES, render, responder, htmlMsg, definirModo, '
           'statusDe, conferirPeca, legendaDe, conferirResposta, parceira, ocupacaoDe, roteiroDe, precisaVisita, textoDe, get modo() { return modo; }, '
           'paciente, grupoDe, faltasCadastro, pacientesFiltrados, conferirResposta, metaCadastro, agendaMonielle, '
           'situacaoCurta, pagamentosDe, conferirPeca, extratoDe, comissoesDoMes, TIPOS, PRECOS, ranking, '
           'proximoPasso, medidaDe, peca, visaoParceira, CAMPANHA, PRODUTOS, preco, recebidoPorTipo, ticketMedio, '
           'receitaPorProfissional, previsao, recorrencia, valorPorOrigem, livresNoDia, livresEm7, proximaAvaliacaoLivre, '
           'podeReservar, projecaoAna, semanaQueLota, receitaEmJogo, achados, cotas, nDecisoes, nEsperando, ROTEIROS, '
           'AGENDA7, LIVRES_SUELLEN, MINIMO_AVALIACAO, PROJ_ANA, META_RECEITA, FECHAMENTO, CAPT_BASE, TEXTO_MMP, '
           'TEXTO_PREPARO, PEDIDO_INSUMOS, util, diasAte, dd, MESES_LONGOS, principais, lembrancinhas, lembrancinhasDoDia };\\n')
script = script[:fim] + exporta + script[fim:]

# Só leitura: os insumos no copiloto da Fer, que faz a gestão do estoque (Luiz, 07/10/2026). Enquanto o bloco não
# existir lá, a leitura devolve null, e o teste pula a comparação com um aviso.
PROTOS = r'C:\\Claude\\DraSuellenApp\\prototipos'
def _bloco(arquivo, inicio, fim_bloco):
    t = open(PROTOS + '\\\\' + arquivo, encoding='utf-8').read()
    if inicio not in t:
        return None
    i = t.index(inicio)
    return t[i:t.index(fim_bloco, i) + len(fim_bloco)]
_INSUMOS = _bloco('copiloto-recepcao.html', 'const INSUMOS_BASE = [', '];')
OUTROS = ('globalThis.__INSUMOS_FER = ' + ('(function () { ' + _INSUMOS + ' return INSUMOS_BASE; })()' if _INSUMOS else 'null') + ';\\n')

'''

TESTES = (AQUI / 'testes_suellen.js').read_text(encoding='utf-8')

RODAPE = '''
ctx = quickjs.Context()
ctx.eval(SHIM)
ctx.eval(script)
ctx.eval('globalThis.__FONTE = ' + json.dumps(html) + ';')
ctx.eval(OUTROS)
ctx.eval(TESTES)
while ctx.execute_pending_job():
    pass
print(ctx.eval('__out.join("\\\\n")'))
'''

open(AQUI / 'testar_suellen.py', 'w', encoding='utf-8', newline='').write(CABECA + shim + "TESTES = r'''\n" + TESTES + "\n'''\n" + RODAPE)
print('escrito')
