package dev.elaine.springlab.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.util.concurrent.atomic.AtomicInteger;

@Aspect
@Component
public final class TracingAspect {
    private final AtomicInteger invocationCount = new AtomicInteger();

    @Around("@annotation(dev.elaine.springlab.aop.Measured)")
    public Object measure(ProceedingJoinPoint joinPoint) throws Throwable {
        invocationCount.incrementAndGet();
        return joinPoint.proceed();
    }

    public int invocationCount() {
        return invocationCount.get();
    }
}

