package br.gov.sigefp.common.service;

import br.gov.sigefp.common.domain.AuditLog;
import br.gov.sigefp.common.repository.AuditLogRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.UUID;

/**
 * Serviço global para registro de logs de auditoria.
 * Disponível para todos os módulos do sistema.
 */
@Service
@RequiredArgsConstructor
@Transactional
public class GlobalAuditLogService {

    private final AuditLogRepository auditLogRepository;

    /**
     * Registra uma ação no log de auditoria.
     * 
     * @param userId      ID do utilizador (opcional)
     * @param username    Nome do utilizador (opcional)
     * @param module      Módulo (ADMIN, ORG, RH, etc)
     * @param action      Ação (CREATE, UPDATE, DELETE, etc)
     * @param entity      Nome da entidade objeto
     * @param entityId    ID da entidade objeto
     * @param description Descrição detalhada (Ex: Campo: [Antigo] -> [Novo])
     */
    public void logAction(UUID userId, String username, String module, String action, String entity, UUID entityId,
            String description) {
        AuditLog log = AuditLog.builder()
                .userId(userId)
                .username(username)
                .module(module)
                .action(action)
                .entity(entity)
                .entityId(entityId)
                .description(description)
                .build();

        auditLogRepository.save(log);
    }
}
