package com.social.media.infrastructure.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.domain.AuditorAware;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

import java.util.Optional;

/**
 * Configuration for JPA Auditing
 */
@Configuration
public class AuditConfig {

    /**
     * Provides the current auditor for JPA auditing
     * In this implementation, we use the authenticated user's username
     * or 'system' if no user is authenticated
     */
    @Bean
    public AuditorAware<String> auditorAware() {
        return () -> {
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
            
            if (authentication == null || !authentication.isAuthenticated()) {
                return Optional.of("system");
            }
            
            String username = authentication.getName();
            if ("anonymousUser".equals(username)) {
                return Optional.of("system");
            }
            
            return Optional.of(username);
        };
    }
}
