package br.gov.servicos.frontend;

import lombok.experimental.FieldDefaults;
import org.jboss.logging.MDC;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Iterator;
import java.util.UUID;

import static lombok.AccessLevel.PRIVATE;

@FieldDefaults(level = PRIVATE, makeFinal = true)
public class TicketFilter extends OncePerRequestFilter {

    public static final String TICKET_KEY = "req.ticket";

    Iterator<UUID> tickets;

    public TicketFilter(Iterator<UUID> tickets) {
        this.tickets = tickets;
    }

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
        try {
            String ticket = tickets.next().toString();

            MDC.put(TICKET_KEY, ticket);
            request.setAttribute(TICKET_KEY, ticket);

            chain.doFilter(request, response);
        } finally {
            MDC.remove(TICKET_KEY);
        }
    }
}