"""
SiteHub LinkedIn ICP Tracker — Flask Web Application

Entry point: python -m webapp.app
"""

import os
import sys
from pathlib import Path
from flask import Flask

# Ensure project root is on sys.path so icp_db / icp_process can be imported
PROJECT_ROOT = Path(__file__).resolve().parent.parent
if str(PROJECT_ROOT) not in sys.path:
    sys.path.insert(0, str(PROJECT_ROOT))


def create_app() -> Flask:
    app = Flask(
        __name__,
        template_folder=str(Path(__file__).resolve().parent / "templates"),
        static_folder=str(Path(__file__).resolve().parent / "static"),
    )
    app.secret_key = os.environ.get("FLASK_SECRET_KEY", "sitehub-icp-dev-key-change-in-prod")

    # --- Database session lifecycle ---
    from icp_db import get_session

    @app.before_request
    def _open_db_session():
        from flask import g
        g.db = get_session()

    @app.teardown_appcontext
    def _close_db_session(exc):
        from flask import g
        db = g.pop("db", None)
        if db is not None:
            db.close()

    # --- Initialise icp_process globals for learned-pattern suggestions ---
    _init_icp_process()

    # --- Load Better Auth user into Flask session ---
    from webapp.auth import load_user_into_session
    app.before_request(load_user_into_session)

    # --- Register blueprints ---
    from webapp.routes import register_blueprints
    register_blueprints(app)

    # --- Auth routes (login/logout) ---
    from webapp.auth import auth_bp
    app.register_blueprint(auth_bp)

    return app


def _init_icp_process():
    """Set icp_process into DB mode and load learned patterns once at startup."""
    import icp_process
    icp_process._USE_DB = True
    # Load learned patterns so get_learned_suggestion() works
    icp_process._load_learned_patterns()
    # Load SiteHub employees
    icp_process._load_additional_sitehub_employees()


if __name__ == "__main__":
    app = create_app()
    app.run(debug=True, port=5000)
