package com.saas.tenant.controller;

import com.saas.tenant.entity.Appointment;
import com.saas.tenant.service.AvailabilityService;
import com.saas.tenant.repository.AppointmentRepository;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/api/mcp")
@Tag(name = "MCP - Context Provider", description = "Endpoints for AI Agents (Vapi/Retell) to retrieve context")
@Slf4j
@RequiredArgsConstructor
public class McpController {

    private final AppointmentRepository appointmentRepository;
    private final AvailabilityService availabilityService;

    @GetMapping("/availability/doctor/{doctorId}")
    @Operation(summary = "Check Doctor Availability", description = "Check if a doctor is available at a specific time")
    public ResponseEntity<Map<String, Object>> checkDoctorAvailability(
            @PathVariable Long doctorId,
            @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime dateTime) {

        boolean isAvailable = availabilityService.isDoctorAvailable(doctorId, dateTime);

        return ResponseEntity.ok(Map.of(
                "doctorId", doctorId,
                "dateTime", dateTime,
                "isAvailable", isAvailable));
    }

    @GetMapping("/appointments/patient/{patientId}")
    @Operation(summary = "Get Patient Appointments", description = "Get upcoming appointments for a patient (Context for Call)")
    public ResponseEntity<List<Appointment>> getPatientAppointments(@PathVariable Long patientId) {
        // Fetch only future confirmed appointments
        // This relies on a custom repository method or filtering
        // For simplicity using existing
        List<Appointment> appointments = appointmentRepository.findByPatientId(patientId);
        return ResponseEntity.ok(appointments);
    }
}
