/* Paginas legais — Termos, Privacidade e Aceite forcado.
   Carrega arquivos markdown via fetch e renderiza com marked. */

const { useState: ulst_useState, useEffect: ulst_useEffect } = React;


function MarkdownPage({ path, titulo }) {
    const [html, setHtml] = ulst_useState('');
    const [err, setErr]   = ulst_useState(null);

    ulst_useEffect(() => {
        let cancelado = false;
        (async () => {
            // Resolve caminho absoluto baseado no local atual (evita ambiguidades
            // com hash router). Ex: em https://core7cap.com/app/#/termos,
            // resolve pra https://core7cap.com/app/legal/termos.md.
            const base = window.location.pathname.replace(/[^/]+$/, '');
            // cache-buster: garante que o browser nao sirva versao antiga em cache
            const cb = 'v=' + Date.now();
            const sep = path.includes('?') ? '&' : '?';
            const full_url = window.location.origin + base + path + sep + cb;
            try {
                const r = await fetch(full_url, {
                    credentials: 'omit',
                    cache: 'no-store',
                });
                if (!r.ok) throw new Error(`HTTP ${r.status} ao buscar ${full_url}`);
                const txt = await r.text();
                if (cancelado) return;
                if (!txt.trim()) throw new Error(`arquivo vazio em ${full_url}`);
                let rendered = window.marked
                    ? window.marked.parse(txt)
                    : `<pre>${txt.replace(/</g, '&lt;')}</pre>`;
                // Sanitiza pra blindar XSS caso o markdown vire dinamico no futuro
                if (window.DOMPurify) {
                    rendered = window.DOMPurify.sanitize(rendered, {
                        ADD_ATTR: ['target'],
                    });
                }
                setHtml(rendered);
            } catch (e) {
                if (!cancelado) setErr(e.message || String(e));
            }
        })();
        return () => { cancelado = true; };
    }, [path]);

    return (
        <div className="legal-page">
            <header className="legal-header">
                <a href="#/dashboard" className="legal-back">← voltar</a>
                <h1>{titulo}</h1>
            </header>
            {err
                ? <div className="legal-error">erro ao carregar: {err}</div>
                : <article
                      className="legal-content"
                      dangerouslySetInnerHTML={{ __html: html }} />
            }
        </div>
    );
}


window.C7_TermsPage = function TermsPage() {
    return <MarkdownPage path="legal/termos.md" titulo="Termos de Uso" />;
};


window.C7_PrivacyPage = function PrivacyPage() {
    return <MarkdownPage path="legal/privacidade.md" titulo="Politica de Privacidade" />;
};


/* Pagina de aceite forcado — redirecionada quando user logado tem
   terms_accepted_at = null. Bloqueia uso ate marcar checkbox + submeter. */
window.C7_AcceptTermsPage = function AcceptTermsPage() {
    const [checked, setChecked]   = ulst_useState(false);
    const [loading, setLoading]   = ulst_useState(false);
    const [err, setErr]           = ulst_useState(null);

    async function submit() {
        if (!checked || loading) return;
        setLoading(true);
        setErr(null);
        try {
            await window.C7_API.post('/auth/accept-terms', {});
            // Atualiza store local pra liberar navegacao
            const me = await window.C7_API.get('/auth/me');
            window.C7_STORE.set({ user: me });
            window.C7_ROUTER.navigate('/dashboard');
        } catch (e) {
            setErr(e.message || 'falha ao salvar aceite');
            setLoading(false);
        }
    }

    const AppFooter = (window.C7_Layout && window.C7_Layout.AppFooter) || null;
    return (
        <div className="standalone-shell">
            <div className="standalone-center">
                <div className="accept-terms-card">
                    <h1>Antes de continuar</h1>
                    <p>
                        Pra usar a Core 7 Capital, voce precisa ler e aceitar
                        nossos{' '}
                        <a href="#/termos" target="_blank">Termos de Uso</a>
                        {' '}e nossa{' '}
                        <a href="#/privacidade" target="_blank">Politica de Privacidade</a>.
                    </p>
                    <label className="accept-terms-checkbox">
                        <input
                            type="checkbox"
                            checked={checked}
                            onChange={(e) => setChecked(e.target.checked)} />
                        <span>
                            Li e concordo com os Termos de Uso e com a Politica
                            de Privacidade.
                        </span>
                    </label>
                    {err && <div className="accept-terms-error">{err}</div>}
                    <button
                        className="accept-terms-btn"
                        onClick={submit}
                        disabled={!checked || loading}>
                        {loading ? 'salvando…' : 'aceitar e continuar'}
                    </button>
                </div>
            </div>
            {AppFooter && <AppFooter />}
        </div>
    );
};
