package com.codebyte.api.config;

import com.codebyte.api.common.web.CorrelationIdFilter;
import io.micrometer.core.instrument.config.MeterFilter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;

/** Correlation id filter (runs first) and an {@code application} common tag on all metrics. */
@Configuration
public class ObservabilityConfig {

    @Bean
    FilterRegistrationBean<CorrelationIdFilter> correlationIdFilter() {
        FilterRegistrationBean<CorrelationIdFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new CorrelationIdFilter());
        registration.addUrlPatterns("/*");
        registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return registration;
    }

    @Bean
    MeterFilter applicationTagMeterFilter(
            @Value("${spring.application.name:demo}") String applicationName) {
        return MeterFilter.commonTags(
                io.micrometer.core.instrument.Tags.of("application", applicationName));
    }
}
