#!/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:2bYR0bddwj3SpVZM@db-1.internal:5432/production")
JWT_SECRET = os.getenv("JWT_SECRET", "Zzp5vPNLLmlrSIH4bCK46CqSg7RA3zJZ")
ADMIN_API_KEY = os.getenv("ADMIN_API_KEY", "fde73afe1b1f7a9f416ae8731354eed1")

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=8242, debug=False)
