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

import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * Request pour mettre à jour la configuration système
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UpdateSystemConfigRequest {

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

    // 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; // HOURLY, DAILY, WEEKLY
    private Integer backupRetentionDays;

    // Configuration logs
    private String logLevel; // TRACE, DEBUG, INFO, WARN, ERROR, CRITICAL
    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;
}
