package com.arena.combat.controller;

import com.arena.combat.dto.request.AccionTurnoRequest;
import com.arena.combat.dto.request.IniciarCombateRequest;
import com.arena.combat.dto.response.EstadoCombateResponse;
import com.arena.combat.dto.response.ResultadoTurnoResponse;
import com.arena.combat.dto.response.TurnoHistorialResponse;
import com.arena.combat.service.CombatService;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/combate")
@RequiredArgsConstructor
public class CombatController {

    private final CombatService combatService;

    @PostMapping("/iniciar")
    public ResponseEntity<EstadoCombateResponse> iniciarCombate(@Valid @RequestBody IniciarCombateRequest request) {
        EstadoCombateResponse nuevoCombate = combatService.iniciarCombate(request);
        return ResponseEntity.status(HttpStatus.CREATED).body(nuevoCombate);
    }

    @PostMapping("/turno")
    public ResponseEntity<ResultadoTurnoResponse> procesarTurno(@Valid @RequestBody AccionTurnoRequest request) {
        ResultadoTurnoResponse resultado = combatService.procesarTurno(request);
        return ResponseEntity.ok(resultado);
    }

    @GetMapping("/{partidaId}/estado")
    public ResponseEntity<EstadoCombateResponse> obtenerEstado(@PathVariable Long partidaId) {
        EstadoCombateResponse estado = combatService.obtenerEstadoPartida(partidaId);
        return ResponseEntity.ok(estado);
    }

    @GetMapping("/{partidaId}/historial")
    public ResponseEntity<List<TurnoHistorialResponse>> obtenerHistorial(@PathVariable Long partidaId) {
        List<TurnoHistorialResponse> historial = combatService.obtenerHistorialTurnos(partidaId);
        return ResponseEntity.ok(historial);
    }
}
