package com.paymentlink.controller.api; import com.paymentlink.model.entity.Region; import com.paymentlink.service.RegionService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; @RestController @RequestMapping("/api") public class RegionApiController { private final RegionService regionService; public RegionApiController(RegionService regionService) { this.regionService = regionService; } /** * GET /api/admin/regions - List all regions */ @GetMapping("/admin/regions") public ResponseEntity> getAllRegions( @RequestParam(required = false) Boolean enabled) { try { List regions; if (enabled != null) { regions = regionService.getAllRegions().stream() .filter(r -> r.getEnabled().equals(enabled)) .toList(); } else { regions = regionService.getAllRegions(); } Map response = new HashMap<>(); response.put("success", true); response.put("regions", regions); response.put("total", regions.size()); return ResponseEntity.ok(response); } catch (Exception e) { Map error = new HashMap<>(); error.put("success", false); error.put("error", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); } } /** * GET /api/admin/regions/stats - Get region statistics */ @GetMapping("/admin/regions/stats") public ResponseEntity> getRegionStats() { try { Map stats = regionService.getStatistics(); stats.put("success", true); return ResponseEntity.ok(stats); } catch (Exception e) { Map error = new HashMap<>(); error.put("success", false); error.put("error", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); } } /** * GET /api/regions/enabled - Get all enabled regions (public) */ @GetMapping("/regions/enabled") public ResponseEntity> getEnabledRegions() { try { List regions = regionService.getAllEnabledRegions(); Map response = new HashMap<>(); response.put("success", true); response.put("regions", regions); response.put("total", regions.size()); return ResponseEntity.ok(response); } catch (Exception e) { Map error = new HashMap<>(); error.put("success", false); error.put("error", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); } } /** * POST /api/admin/regions/{countryCode}/enable - Enable a country */ @PostMapping("/admin/regions/{countryCode}/enable") public ResponseEntity> enableCountry(@PathVariable String countryCode) { try { regionService.enableCountry(countryCode); Map response = new HashMap<>(); response.put("success", true); response.put("message", "Country " + countryCode + " enabled successfully"); return ResponseEntity.ok(response); } catch (Exception e) { Map error = new HashMap<>(); error.put("success", false); error.put("error", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); } } /** * POST /api/admin/regions/{countryCode}/disable - Disable a country */ @PostMapping("/admin/regions/{countryCode}/disable") public ResponseEntity> disableCountry(@PathVariable String countryCode) { try { regionService.disableCountry(countryCode); Map response = new HashMap<>(); response.put("success", true); response.put("message", "Country " + countryCode + " disabled successfully"); return ResponseEntity.ok(response); } catch (Exception e) { Map error = new HashMap<>(); error.put("success", false); error.put("error", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); } } /** * GET /api/admin/regions/{countryCode} - Get specific region */ @GetMapping("/admin/regions/{countryCode}") public ResponseEntity> getRegion(@PathVariable String countryCode) { try { Region region = regionService.getRegion(countryCode); if (region == null) { Map error = new HashMap<>(); error.put("success", false); error.put("error", "Region not found"); return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error); } Map response = new HashMap<>(); response.put("success", true); response.put("region", region); return ResponseEntity.ok(response); } catch (Exception e) { Map error = new HashMap<>(); error.put("success", false); error.put("error", e.getMessage()); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error); } } }