import os
import re
import tempfile
from pathlib import Path

from hostable_portal import create_app
from hostable_portal.extensions import db
from hostable_portal.models import User


def main():
    test_db = Path(tempfile.gettempdir()) / "hostable_portal_smoke.db"
    os.environ.setdefault("SECRET_KEY", "smoke-secret-key")
    os.environ["DATABASE_URL"] = "sqlite:///" + str(test_db).replace("\\", "/")
    os.environ.setdefault("HOSTABLE_APP_NAME", "SPANDAMAN Hostable Portal Smoke")

    app = create_app()
    with app.app_context():
        db.drop_all()
        db.create_all()
        user = User.query.filter_by(username="admin").first()
        if not user:
            user = User(
                username="admin",
                email="admin@example.com",
                role="admin",
                is_active=True,
            )
            user.set_password("ChangeThisNow123!")
            db.session.add(user)
            db.session.commit()

    client = app.test_client()
    login_html = client.get("/login").get_data(as_text=True)
    match = re.search(r'name="csrf_token" value="([^"]+)"', login_html)
    assert match, "missing csrf token"
    csrf = match.group(1)

    resp = client.post(
        "/login",
        data={
            "username": "admin",
            "password": "ChangeThisNow123!",
            "csrf_token": csrf,
        },
        follow_redirects=True,
    )
    body = resp.get_data(as_text=True)
    assert "Recent Audit Log" in body, "dashboard missing after login"

    admin_resp = client.get("/admin/users")
    assert admin_resp.status_code == 200, admin_resp.status_code
    assert "Create User" in admin_resp.get_data(as_text=True), "admin page missing"
    print("HOSTABLE_PORTAL_SMOKE_OK")


if __name__ == "__main__":
    main()
