Reserva.java

package br.inatel.reservasalas.entidades;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Reserva {
    private static final DateTimeFormatter FORMATO_BR = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
    private static final int DURACAO_HORAS = 2;

    private Usuario usuario;
    private Sala sala;
    private LocalDateTime inicio;
    private LocalDateTime fim;
    private boolean ativa;

    public Reserva(Usuario usuario, Sala sala, LocalDateTime inicio) {
        this.usuario = usuario;
        this.sala = sala;
        this.inicio = inicio;
        this.fim = inicio.plusHours(DURACAO_HORAS);
        this.ativa = true;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public Sala getSala() {
        return sala;
    }

    public void setSala(Sala sala) {
        this.sala = sala;
    }

    public LocalDateTime getInicio() {
        return inicio;
    }

    public LocalDateTime getFim() {
        return fim;
    }

    public boolean isAtiva() {
        return ativa;
    }

    public void cancelar() {
        this.ativa = false;
    }

    public void encerrar() {
        this.ativa = false;
    }

    public boolean estaExpirada() {
        return LocalDateTime.now().isAfter(fim);
    }

    public boolean estaDentroJanelaRenovacao() {
        LocalDateTime agora = LocalDateTime.now();
        LocalDateTime inicioJanela = fim.minusMinutes(15);
        return agora.isAfter(inicioJanela) && agora.isBefore(fim);
    }

    @Override
    public String toString() {
        return "Reserva: " + sala + " | " + usuario.getNome()
                + " | " + inicio.format(FORMATO_BR) + " - " + fim.format(FORMATO_BR)
                + " | " + (ativa ? "Ativa" : "Encerrada");
    }
}