import 'dart:io';
import 'package:backend/extensions/request_context.dart';
import 'package:dart_frog/dart_frog.dart';
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';

Middleware authMiddleware() {
  return (handler) {
    return (context) async {
      // Get the authorization header
      final authHeader = context.request.headers['authorization'];
      if (authHeader == null || !authHeader.startsWith('Bearer ')) {
        return Response(statusCode: HttpStatus.unauthorized);
      }

      final token = authHeader.substring(7);
      try {
        // Verify the JWT token
        JWT.verify(
          token,
          SecretKey(jwtSecret),
        );

        // If verification successful, continue to the route handler
        return handler(context);
      } catch (e) {
        return Response.json(
          statusCode: HttpStatus.unauthorized,
          body: {'error': e.toString()},
        );
      }
    };
  };
}
