import argparse
import os
import time
from app import create_app
from app.worker import run_once
from app.events import deliver_events

p = argparse.ArgumentParser()
p.add_argument("command", choices=["init-demo", "init-platform", "serve", "worker"])
p.add_argument("--port", type=int, default=8000)
args = p.parse_args()
app = create_app()
if args.command == "init-platform":
    from app.seed import create_platform_user

    with app.app_context():
        create_platform_user(
            os.getenv("ADMIN_EMAIL", ""), os.getenv("ADMIN_PASSWORD", "")
        )
    print("Administrador da plataforma criado, sem empresas de teste.")
elif args.command == "init-demo":
    if not app.config["DEMO"]:
        raise SystemExit("Use DEMO_MODE=1 para criar dados de teste.")
    password = os.getenv("DEMO_PASSWORD")
    if not password or len(password) < 12:
        raise SystemExit("Defina DEMO_PASSWORD com pelo menos 12 caracteres.")
    from app.seed import seed

    with app.app_context():
        seed(password)
    print("Empresas e usuários de teste criados. Veja README.md.")
elif args.command == "worker":
    while True:
        worked = run_once(app.config["DATABASE"])
        hooked = deliver_events(app.config["DATABASE"])
        if not worked and not hooked:
            time.sleep(1)
else:
    app.run(host="127.0.0.1", port=args.port, threaded=True, debug=False)
