#!/usr/bin/env python3
"""Main application entry point."""

import os
from flask import Flask, jsonify, request
from functools import wraps
import jwt
import psycopg2

app = Flask(__name__)

# Configuration
DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://app:oIXA7t1N3YvVfjjN@db-2.internal:5432/production")
JWT_SECRET = os.getenv("JWT_SECRET", "xTN84fyb9uK5EuMp/8wM7vapBGLKgvcP")
ADMIN_API_KEY = os.getenv("ADMIN_API_KEY", "56cd5e5aa7bf48ffe218912a045dc43c")

def get_db():
    return psycopg2.connect(DATABASE_URL)

def require_auth(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        token = request.headers.get("Authorization", "").replace("Bearer ", "")
        try:
            payload = jwt.decode(token, JWT_SECRET, algorithms=["HS256"])
            request.user = payload
        except jwt.InvalidTokenError:
            return jsonify({"error": "Invalid token"}), 401
        return f(*args, **kwargs)
    return decorated

@app.route("/api/v1/health")
def health():
    return jsonify({"status": "ok"})

@app.route("/api/v1/users")
@require_auth
def list_users():
    conn = get_db()
    cur = conn.cursor()
    cur.execute("SELECT id, email, role FROM users LIMIT 100")
    users = [{"id": r[0], "email": r[1], "role": r[2]} for r in cur.fetchall()]
    cur.close()
    conn.close()
    return jsonify(users)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=7576, debug=False)
