#!/usr/bin/env python3
"""Restore Elementor pages + patch copy. Usage: patch then apply via WP."""
import json
import sys
from copy import deepcopy

COMMON = {
    "Clique aqui": "Ver planos",
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit.": "Planos claros, do Gratuito ao Consultivo",
    "Lorem Ipsum Dolor Siamet": "Solução NoLapis",
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit": "Feito para PMEs de serviço",
    "Nulla laoreet vehicula magna, at dictum sapien sollicitudin eget. Ut convallis libero eu odio tempor laoreet.": "Operação, financeiro e indicadores no mesmo fluxo — sem planilha paralela.",
    "Donec eu sodales diam. Praesent odio eros, dapibus vel pharetra eget": "O que o NoLapis entrega de verdade",
    "Número legal": "—",
    "Plano Bronze": "Gratuito",
    "Plano Prata": "Start",
    "Plano Ouro": "Gestão",
    "Consultoria Avulsa": "Consultivo",
    "R$79,90/mês": "R$ 49,90/mês",
    "R$ 159,90/mês": "R$ 99,90/mês",
    "Sob demanda": "Sob consulta",
    "Teste Agora": "Começar grátis",
    "Assinar Agora": "Assinar agora",
    "Fale com um especialista": "Falar com a equipe",
    "🚀 Escolha o Melhor Plano para sua Empresa": "Escolha o plano certo para a sua operação",
    "Conheça os Planos da NoLapis": "Abaixo: grade dinâmica do produto. Os cards antigos foram alinhados aos planos atuais.",
    "Tire suas dúvidas": "Tire suas dúvidas",
    "Perguntas frequentes": "Perguntas frequentes",
    "NoLapis.Cash": "Cobrança e recebimentos",
    "Estoque e Produção": "Agenda e operação de serviço",
    "Produtos em estoque": "Status da operação",
    "Ordem de produção": "Agenda da equipe",
    "Relatório de curva ABC": "Indicadores de resultado",
    "Custos de produção": "Margem e DRE gerencial",
    "Painel do Contador": "Visão para o contador parceiro",
    "Vendas e NF-e": "Vendas e notas",
    "Serviços e NFS-e": "Serviços e NFS-e",
    "CRM": "Clientes e relacionamento",
    "Finanças": "Financeiro",
}

PLANOS_EXTRA = {
    "Ideal para autônomos e pequenos negócios": "Para conhecer o fluxo sem cartão",
    "Acesso básico ao NoLapis para quem está começando e precisa de uma solução simples.": "Limites claros — sem NFS-e nem DRE gerencial.",
    "Perfeito para PMEs em crescimento": "Comece digital com NFS-e",
    "Mais recursos e automações para melhorar a produtividade e organização.": "Ideal quando o foco é faturar com poucos usuários.",
    "Para empresas que precisam de suporte avançado": "Gestão completa para crescer",
    "Ferramentas avançadas e atendimento prioritário para operações mais robustas.": "DRE, agenda, contratos — o mais escolhido.",
    "Personalizado para sua empresa": "Software + acompanhamento próximo",
    "Acompanhamento estratégico para empresas que precisam de suporte especializado.": "Para a rotina colar de verdade.",
}

FEATURES_EXTRA = {
    "Emita boletos registrados, faça pagamentos e transferências em um banco digital dentro do sistema NoLapis.": "Organize cobranças e contas a receber no fluxo da operação — sem banco digital embutido.",
    "Garanta que suas operações sejam feitas sempre em dia, controlando seu estoque e produção de forma otimizada.": "Controle agenda, status de serviço e equipe de campo — foco em prestadores, não em fábrica.",
    "Automatize as movimentações sobre compras e vendas e mantenha o giro do estoque sempre atualizado.": "Acompanhe o andamento dos serviços e o que está pendente com a equipe.",
    "Visualize cada etapa da produção e a quantidade de matéria-prima e estoque disponíveis em uma mesma tela.": "Veja a agenda da equipe e o status das ordens/atendimentos em um só lugar.",
    "Avalie a relevância de cada produto com relatórios que se baseiam em lucros, prejuízos, compras ou vendas.": "Acompanhe indicadores de resultado da operação de serviço.",
    "Entenda o valor médio de cada produto fabricado fazendo o acompanhamento de todas as etapas de produção.": "Nos planos com DRE, veja margem e resultado no decorrer do mês.",
    "Gerencie e fature vendas de produtos com um sistema completamente integrado e automatizado.": "Registre vendas de serviço e avance no faturamento conforme o plano.",
    "Emita notas fiscais e boletos, dê baixa no estoque e gere contas a receber.": "Emita notas (NFS-e/NF-e conforme plano) e gere contas a receber no fluxo.",
}

SOBRE_EXTRA = {
    "Do trial ao plano Consultivo, o NoLapis prioriza ativação prática e suporte próximo — para a rotina da PME colar de verdade, sem tour infinito de telas.": "Do Gratuito ao Consultivo, o NoLapis prioriza ativação prática e suporte próximo — para a rotina da PME colar de verdade, sem tour infinito de telas.",
}


def patch_str(s: str, extra: dict) -> str:
    if not isinstance(s, str):
        return s
    bag = {**COMMON, **extra}
    if s in bag:
        return bag[s]
    for a, b in bag.items():
        if a in s:
            s = s.replace(a, b)
    # strip leftover lorem paragraphs
    if "Lorem ipsum" in s:
        s = "<p>Conteúdo atualizado — veja os planos e a solução NoLapis para PMEs de serviço.</p>"
    return s


def hide_if_lorem(o: dict) -> None:
    s = o.get("settings") or {}
    blob = json.dumps(s, ensure_ascii=False)
    if "Lorem ipsum" in blob or "Lorem Ipsum" in blob:
        s["hide_desktop"] = "hidden-desktop"
        s["hide_tablet"] = "hidden-tablet"
        s["hide_mobile"] = "hidden-mobile"
        o["settings"] = s


def walk(o, extra: dict):
    if isinstance(o, dict):
        if o.get("widgetType") in ("button", "call-to-action"):
            settings = o.setdefault("settings", {})
            text = settings.get("text") or ""
            text2 = patch_str(text, extra)
            settings["text"] = text2
            link = settings.get("link") if isinstance(settings.get("link"), dict) else {}
            tl = text2.lower()
            if any(x in tl for x in ("grátis", "gratis", "começar", "teste")):
                link["url"] = "https://app.nolapis.com.br/cadastro/gratuito?utm_source=site&utm_medium=organic&utm_campaign=pages"
            elif "start" in tl:
                link["url"] = "https://app.nolapis.com.br/cadastro/start?utm_source=site&utm_medium=organic&utm_campaign=pages"
            elif any(x in tl for x in ("assinar", "gestão", "gestao")):
                link["url"] = "https://app.nolapis.com.br/cadastro/gestao?utm_source=site&utm_medium=organic&utm_campaign=pages"
            elif any(x in tl for x in ("equipe", "especialista", "fale")):
                link["url"] = "https://nolapis.com.br/wp/contato/"
            elif "plano" in tl or "ver " in tl:
                link["url"] = "https://nolapis.com.br/wp/planos/"
            if link:
                settings["link"] = link
        for k, v in list(o.items()):
            if isinstance(v, str):
                o[k] = patch_str(v, extra)
            else:
                walk(v, extra)
        hide_if_lorem(o)
    elif isinstance(o, list):
        for i in o:
            walk(i, extra)


def process(src: str, dst: str, kind: str):
    data = json.load(open(src))
    extra = {}
    if kind == "planos":
        extra = PLANOS_EXTRA
    elif kind == "features":
        extra = FEATURES_EXTRA
    elif kind == "sobre":
        extra = SOBRE_EXTRA
    walk(data, extra)
    open(dst, "w").write(json.dumps(data, ensure_ascii=False, separators=(",", ":")))
    raw = open(dst).read()
    print(kind, "bytes", len(raw), "Bronze", raw.count("Bronze"), "Lorem", raw.lower().count("lorem ipsum"), "Cash", raw.count("NoLapis.Cash"))


if __name__ == "__main__":
    # args: kind src dst
    process(sys.argv[2], sys.argv[3], sys.argv[1])
