package com.ruemu.springops.controller;

import com.ruemu.springops.dto.CreateRequestDto;
import com.ruemu.springops.dto.DashboardDto;
import com.ruemu.springops.model.AuditEvent;
import com.ruemu.springops.model.ServiceRequest;
import com.ruemu.springops.service.AuditService;
import com.ruemu.springops.service.RequestService;
import jakarta.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api")
public class ApiController {
    private final RequestService requests;
    private final AuditService audit;

    public ApiController(RequestService requests, AuditService audit) {
        this.requests = requests;
        this.audit = audit;
    }

    @GetMapping("/dashboard")
    public DashboardDto dashboard() { return requests.dashboard(); }

    @GetMapping("/requests")
    public List<ServiceRequest> list() { return requests.all(); }

    @PostMapping("/requests")
    @ResponseStatus(HttpStatus.CREATED)
    public ServiceRequest create(@Valid @RequestBody CreateRequestDto dto) { return requests.create(dto); }

    @PatchMapping("/requests/{id}/status")
    public ServiceRequest status(@PathVariable Long id, @RequestBody Map<String, String> body) {
        return requests.updateStatus(id, ServiceRequest.Status.valueOf(body.get("status").toUpperCase()));
    }

    @GetMapping("/audit")
    public List<AuditEvent> audit() { return audit.latest(); }
}
