"""
Example route module - Copy this pattern for your domain.

This module demonstrates:
1. Registering routes with Flask app
2. Using auth validation
3. Making database calls via postgres module
"""

import os
import flask
import jwt
import core.auth as auth
import core.postgres as postgres


def _get_user_uuid(token):
    """Decode JWT to extract user UUID. Returns None on failure."""
    try:
        payload = jwt.decode(token, os.getenv("JWT_SECRET"), algorithms=["HS256"])
        return payload.get("sub")
    except (jwt.ExpiredSignatureError, jwt.InvalidTokenError):
        return None


def register(app):
    """Register routes with the Flask app."""

    @app.route("/api/example", methods=["GET"])
    def api_listExamples():
        header = flask.request.headers.get("Authorization", "")
        if not header.startswith("Bearer "):
            return flask.jsonify({"error": "missing token"}), 401
        token = header[7:]

        user_uuid = _get_user_uuid(token)
        if not user_uuid or not auth.verifyLoginToken(token, userUUID=user_uuid):
            return flask.jsonify({"error": "unauthorized"}), 401

        items = postgres.select("examples")
        return flask.jsonify(items), 200

    @app.route("/api/example", methods=["POST"])
    def api_addExample():
        header = flask.request.headers.get("Authorization", "")
        if not header.startswith("Bearer "):
            return flask.jsonify({"error": "missing token"}), 401
        token = header[7:]

        user_uuid = _get_user_uuid(token)
        if not user_uuid or not auth.verifyLoginToken(token, userUUID=user_uuid):
            return flask.jsonify({"error": "unauthorized"}), 401

        data = flask.request.get_json()
        item = postgres.insert("examples", data)
        return flask.jsonify(item), 201
