package com.social.media.domain.socialaccount.valueobject;

/**
 * Enumeration of social account connection statuses
 */
public enum ConnectionStatus {
    ACTIVE("ATIVO", true),
    INACTIVE("INATIVO", false),
    TOKEN_ERROR("ERRO_TOKEN", false),
    SUSPENDED("SUSPENSO", false),
    BANNED("BANIDO", false);
    
    private final String dbValue;
    private final boolean canOperate;
    
    ConnectionStatus(String dbValue, boolean canOperate) {
        this.dbValue = dbValue;
        this.canOperate = canOperate;
    }
    
    public String getDbValue() {
        return dbValue;
    }
    
    public boolean canOperate() {
        return canOperate;
    }
    
    public boolean canPublish() {
        return this == ACTIVE;
    }
    
    public boolean requiresTokenRefresh() {
        return this == TOKEN_ERROR;
    }
    
    public boolean isTemporaryIssue() {
        return this == TOKEN_ERROR || this == SUSPENDED;
    }
    
    public static ConnectionStatus fromDbValue(String dbValue) {
        for (ConnectionStatus status : values()) {
            if (status.dbValue.equals(dbValue)) {
                return status;
            }
        }
        throw new IllegalArgumentException("Unknown connection status: " + dbValue);
    }
}
