package com.evseminar.controller;

import com.evseminar.dto.*;
import com.evseminar.model.Registration;
import com.evseminar.repository.RegistrationRepository;
import com.evseminar.service.SeminarService;
import com.evseminar.service.VehicleService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/admin")
@RequiredArgsConstructor
public class AdminController {

    private final VehicleService vehicleService;
    private final SeminarService seminarService;
    private final RegistrationRepository registrationRepository;

    // ── Vehicles ────────────────────────────────────────────────

    @GetMapping("/vehicles")
    public ResponseEntity<List<VehicleDTO>> getAllVehicles() {
        return ResponseEntity.ok(vehicleService.getAllVehicles());
    }

    @PostMapping("/vehicles")
    public ResponseEntity<VehicleDTO> createVehicle(@Valid @RequestBody VehicleRequest request) {
        return ResponseEntity.ok(vehicleService.createVehicle(request));
    }

    @PutMapping("/vehicles/{id}")
    public ResponseEntity<VehicleDTO> updateVehicle(@PathVariable Long id,
                                                     @Valid @RequestBody VehicleRequest request) {
        return ResponseEntity.ok(vehicleService.updateVehicle(id, request));
    }

    @DeleteMapping("/vehicles/{id}")
    public ResponseEntity<ApiResponse> deleteVehicle(@PathVariable Long id) {
        vehicleService.deleteVehicle(id);
        return ResponseEntity.ok(ApiResponse.success("Vehicle deleted"));
    }

    // ── Seminars ─────────────────────────────────────────────────

    @GetMapping("/seminars")
    public ResponseEntity<List<SeminarDTO>> getAllSeminars() {
        return ResponseEntity.ok(seminarService.getAllSeminars());
    }

    @PostMapping("/seminars")
    public ResponseEntity<SeminarDTO> createSeminar(@Valid @RequestBody SeminarRequest request) {
        return ResponseEntity.ok(seminarService.createSeminar(request));
    }

    @PutMapping("/seminars/{id}")
    public ResponseEntity<SeminarDTO> updateSeminar(@PathVariable Long id,
                                                     @Valid @RequestBody SeminarRequest request) {
        return ResponseEntity.ok(seminarService.updateSeminar(id, request));
    }

    @DeleteMapping("/seminars/{id}")
    public ResponseEntity<ApiResponse> deleteSeminar(@PathVariable Long id) {
        seminarService.deleteSeminar(id);
        return ResponseEntity.ok(ApiResponse.success("Seminar deleted"));
    }

    // ── Registrations (read-only) ────────────────────────────────

    @GetMapping("/registrations")
    public ResponseEntity<List<RegistrationDTO>> getAllRegistrations() {
        List<RegistrationDTO> list = registrationRepository.findAll()
                .stream()
                .map(RegistrationDTO::from)
                .toList();
        return ResponseEntity.ok(list);
    }
}
