"""Inicializador local multiplataforma. Não usar como serviço de produção."""

import getpass
import os
from pathlib import Path
import secrets
import subprocess
import sys

ROOT = Path(__file__).resolve().parent
os.chdir(ROOT)
instance = ROOT / "instance"
instance.mkdir(exist_ok=True)
secret_file = instance / "local-secret"
if not secret_file.exists():
    secret_file.write_text(secrets.token_urlsafe(48))
    secret_file.chmod(0o600)
os.environ.update(
    DEMO_MODE="1", COOKIE_SECURE="0", SECRET_KEY=secret_file.read_text().strip()
)
os.environ.setdefault("DATABASE", str(instance / "conversa.db"))
from app import create_app
from app.db import connect

app = create_app()
with connect(app.config["DATABASE"]) as c:
    empty = not c.execute("select 1 from companies").fetchone()
if empty:
    password = os.environ.get("DEMO_PASSWORD") or getpass.getpass(
        "Crie a senha de teste (mínimo 12 caracteres): "
    )
    if len(password) < 12:
        raise SystemExit("Senha precisa ter pelo menos 12 caracteres.")
    from app.seed import seed

    with app.app_context():
        seed(password)
worker = subprocess.Popen([sys.executable, "manage.py", "worker"])
print("Conversa disponível em http://127.0.0.1:8000 — somente teste local.")
try:
    app.run(
        host="127.0.0.1",
        port=int(os.getenv("PORT", "8000")),
        threaded=True,
        debug=False,
    )
finally:
    worker.terminate()
    try:
        worker.wait(timeout=5)
    except subprocess.TimeoutExpired:
        worker.kill()
