package com.ruemu.springops.service;

import com.ruemu.springops.model.AuditEvent;
import com.ruemu.springops.repository.AuditEventRepository;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

@Service
public class AuditService {
    private final AuditEventRepository repository;
    private final Deque<AuditEvent> local = new ArrayDeque<>();

    public AuditService(AuditEventRepository repository) {
        this.repository = repository;
    }

    public void record(Long requestId, String type, String message) {
        AuditEvent event = new AuditEvent(requestId, type, message);
        try { repository.save(event); }
        catch (Exception ignored) {
            synchronized (local) {
                local.addFirst(event);
                while (local.size() > 20) local.removeLast();
            }
        }
    }

    public List<AuditEvent> latest() {
        try { return repository.findTop10ByOrderByCreatedAtDesc(); }
        catch (Exception ignored) {
            synchronized (local) { return new ArrayList<>(local); }
        }
    }
}
