package dev.lions.unionflow.server.api.dto.system.response;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * Response contenant la configuration système complète
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SystemConfigResponse {

    // Configuration générale
    private String applicationName;
    private String timezone;
    private String defaultLanguage;
    private Boolean maintenanceMode;
    private String version;
    private LocalDateTime lastUpdated;

    // Configuration réseau
    private Integer networkTimeout;
    private Integer maxRetries;
    private Integer connectionPoolSize;

    // Configuration sécurité
    private Boolean twoFactorAuthEnabled;
    private Integer sessionTimeoutMinutes;
    private Boolean auditLoggingEnabled;

    // Configuration performance
    private Boolean metricsCollectionEnabled;
    private Integer metricsIntervalSeconds;
    private Boolean performanceOptimizationEnabled;

    // Configuration backup
    private Boolean autoBackupEnabled;
    private String backupFrequency;
    private Integer backupRetentionDays;
    private LocalDateTime lastBackup;

    // Configuration logs
    private String logLevel;
    private Integer logRetentionDays;
    private Boolean detailedLoggingEnabled;
    private Boolean logCompressionEnabled;

    // Configuration monitoring
    private Boolean realTimeMonitoringEnabled;
    private Integer monitoringIntervalSeconds;
    private Boolean emailAlertsEnabled;
    private Boolean pushAlertsEnabled;

    // Configuration alertes
    private Boolean cpuHighAlertEnabled;
    private Integer cpuThresholdPercent;
    private Boolean memoryLowAlertEnabled;
    private Integer memoryThresholdPercent;
    private Boolean criticalErrorAlertEnabled;
    private Boolean connectionFailureAlertEnabled;
    private Integer connectionFailureThreshold;

    // Statut système
    private String systemStatus; // OPERATIONAL, DEGRADED, DOWN
    private Long uptime; // en millisecondes
}
