/**
 * @ Author: Harry
 * @ Create Time: 2025-06-26
 * @ Modified by: Harry
 * @ Modified time: 2025-06-26
 * @ Description: Controller class for Kinde integration for managing users.
 */

package ca.trolet.datareplicationservice.web;

import ca.trolet.datareplicationservice.services.KindeService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import lombok.RequiredArgsConstructor;
import org.openapitools.client.model.UsersResponseUsersInner;
import org.openapitools.client.model.User;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
public class KindeUsersController {

    private final KindeService kindeService;

    @Operation(summary = "Get all Kinde users")
    @ApiResponse(responseCode = "200", description = "Users retrieved successfully")
    @SecurityRequirement(name = "BearerAuth")
    @GetMapping("/users")
    public ResponseEntity<List<UsersResponseUsersInner>> getAllUsers() {
        try {
            return ResponseEntity.ok(kindeService.getAllUsers());
        } catch (Exception e) {
            System.err.println("Error retrieving Kinde users: " + e.getMessage());
            e.printStackTrace();
            return ResponseEntity.badRequest().body(null);
        }
    }

    @Operation(summary = "Get Kinde user by ID")
    @ApiResponse(responseCode = "200", description = "User retrieved successfully")
    @SecurityRequirement(name = "BearerAuth")
    @GetMapping("/user/{userId}")
    public ResponseEntity<User> getUserById(@PathVariable String userId) {

        try {
            User user = kindeService.getUserById(userId);
            if (user == null) {
                return ResponseEntity.badRequest().body(null);
            }
            return ResponseEntity.ok(user);
        } catch (Exception e) {
            System.err.println("Error retrieving Kinde user by ID: " + e.getMessage());
            return ResponseEntity.badRequest().body(null);
        }
    }
}