using Microsoft.AspNetCore.Mvc; using BibliotecaAPI.Data; using BibliotecaAPI.Models; using Microsoft.EntityFrameworkCore; namespace BibliotecaAPI.Controllers { [Route("api/[controller]")] [ApiController] public class PrestamosController : ControllerBase { private readonly BibliotecaContext _context; public PrestamosController(BibliotecaContext context) { _context = context; } // Crear préstamo [HttpPost("crear")] public async Task> CrearPrestamo(Prestamo prestamo) { // Verificar si el usuario tiene 3 o más préstamos no devueltos var prestamosActivos = await _context.Prestamos .Where(p => p.Id_Usuario == prestamo.Id_Usuario && !p.Devuelto) .CountAsync(); if (prestamosActivos >= 3) return BadRequest("El usuario ya tiene 3 préstamos activos. Debe devolver al menos uno antes de realizar un nuevo préstamo."); var libro = await _context.Libros.FindAsync(prestamo.Id_Libro); if (libro == null || libro.Copias_Disponibles <= 0) return BadRequest("Libro no disponible."); libro.Copias_Disponibles--; prestamo.Fecha_Prestamo = DateTime.Now; prestamo.Devuelto = false; _context.Prestamos.Add(prestamo); await _context.SaveChangesAsync(); return Ok(prestamo); } // Registrar devolución [HttpPut("devolver/{id}")] public async Task RegistrarDevolucion(int id) { var prestamo = await _context.Prestamos //.Include(p => p.Libro) // propiedad de navegación .FirstOrDefaultAsync(p => p.Id_Prestamo == id); if (prestamo == null) return NotFound(); if (prestamo.Devuelto) return BadRequest("Este préstamo ya fue devuelto."); prestamo.Devuelto = true; //prestamo.Libro.Copias_Disponibles++; await _context.SaveChangesAsync(); return Ok("Devolución registrada con éxito."); } // Consultar préstamos activos [HttpGet("activos")] public async Task>> GetActivos() { return await _context.Prestamos //.Include(p => p.Libro) //.Include(p => p.Usuario) .Where(p => !p.Devuelto) .ToListAsync(); } // Consultar préstamos vencidos (más de 10 días) [HttpGet("vencidos")] public async Task>> GetVencidos() { var hoy = DateTime.Now; return await _context.Prestamos //.Include(p => p.Libro) //.Include(p => p.Usuario) .Where(p => !p.Devuelto && (hoy - p.Fecha_Prestamo).TotalDays > 10) .ToListAsync(); } // Historial por usuario [HttpGet("historial/{usuarioId}")] public async Task>> GetHistorialUsuario(int usuarioId) { return await _context.Prestamos //.Include(p => p.Libro) .Where(p => p.Id_Usuario == usuarioId) .ToListAsync(); } } }