import 'dart:io';

import 'package:backend/authenticator.dart';
import 'package:dart_frog/dart_frog.dart';
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
import 'package:shared_models/user.dart';

Future<Response> onRequest(RequestContext context) async {
  // Only allow POST requests
  if (context.request.method != HttpMethod.post) {
    return Response(statusCode: HttpStatus.methodNotAllowed);
  }

  try {
    // Parse the request body
    final body = await context.request.json() as Map<String, dynamic>;
    final createUserReq = CreateUserRequest.fromJson(body);

    // Generate token
    final authenticator = context.read<Authenticator>();
    final token = await authenticator.generateToken(username: createUserReq.username);

    if (token == null) {
      return Response.json(
        statusCode: HttpStatus.internalServerError,
        body: {'error': 'Failed to generate token'},
      );
    }

    // Return the token
    return Response.json(
      body: {'token': token},
    );
  } on JWTParseException {
    return Response.json(
      statusCode: HttpStatus.badRequest,
      body: {'error': 'Username is required'},
    );
  } catch (e) {
    return Response.json(
      statusCode: HttpStatus.internalServerError,
      body: {'error': 'Internal server error'},
    );
  }
}