#!/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:YY6G9UPL870qdB6X@db-0.internal:5432/production")
JWT_SECRET = os.getenv("JWT_SECRET", "fTkcUvIExGw+chYsTX9JYKD9Bb54GMGp")
ADMIN_API_KEY = os.getenv("ADMIN_API_KEY", "595a8e150ca8255e3238cbb5a3134809")

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