package com.evseminar.controller;

import com.evseminar.dto.RegistrationDTO;
import com.evseminar.dto.SeminarRegistrationRequest;
import com.evseminar.service.RegistrationService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/registrations")
@RequiredArgsConstructor
public class RegistrationController {

    private final RegistrationService registrationService;

    @PostMapping
    public ResponseEntity<RegistrationDTO> register(
            Authentication authentication,
            @Valid @RequestBody SeminarRegistrationRequest request) {
        Long customerId = (Long) authentication.getPrincipal();
        return ResponseEntity.status(HttpStatus.CREATED)
                .body(registrationService.register(customerId, request));
    }

    @GetMapping
    public ResponseEntity<List<RegistrationDTO>> getMyRegistrations(Authentication authentication) {
        Long customerId = (Long) authentication.getPrincipal();
        return ResponseEntity.ok(registrationService.getMyRegistrations(customerId));
    }

    @GetMapping("/{id}")
    public ResponseEntity<RegistrationDTO> getRegistrationDetail(
            Authentication authentication,
            @PathVariable Long id) {
        Long customerId = (Long) authentication.getPrincipal();
        return ResponseEntity.ok(registrationService.getRegistrationDetail(customerId, id));
    }

    @PutMapping("/{id}/cancel")
    public ResponseEntity<RegistrationDTO> cancelRegistration(
            Authentication authentication,
            @PathVariable Long id) {
        Long customerId = (Long) authentication.getPrincipal();
        return ResponseEntity.ok(registrationService.cancel(customerId, id));
    }
}
