package com.social.media.domain.campaign.valueobject;

/**
 * Enum representing campaign interaction status
 */
public enum CampaignInteractionStatus {
    WAIT("Wait", "Aguardando"),
    RUNNING("Running", "Executando"),
    PAUSED("Paused", "Pausado"),
    COMPLETED("Completed", "Concluído"),
    CANCELLED("Cancelled", "Cancelado");
    
    private final String englishName;
    private final String portugueseName;
    
    CampaignInteractionStatus(String englishName, String portugueseName) {
        this.englishName = englishName;
        this.portugueseName = portugueseName;
    }
    
    public String getEnglishName() {
        return englishName;
    }
    
    public String getPortugueseName() {
        return portugueseName;
    }
    
    public boolean canTransitionTo(CampaignInteractionStatus newStatus) {
        return switch (this) {
            case WAIT -> newStatus == RUNNING || newStatus == CANCELLED;
            case RUNNING -> newStatus == PAUSED || newStatus == COMPLETED || newStatus == CANCELLED;
            case PAUSED -> newStatus == RUNNING || newStatus == CANCELLED;
            case COMPLETED, CANCELLED -> false; // Final states
        };
    }
    
    public boolean isActive() {
        return this == RUNNING;
    }
    
    public boolean isFinished() {
        return this == COMPLETED || this == CANCELLED;
    }
    
    public boolean canBeModified() {
        return this == WAIT || this == PAUSED;
    }
    
    public static CampaignInteractionStatus fromPortuguese(String value) {
        if (value == null) {
            throw new IllegalArgumentException("Campaign interaction status cannot be null");
        }
        
        for (CampaignInteractionStatus status : values()) {
            if (status.portugueseName.equalsIgnoreCase(value.trim())) {
                return status;
            }
        }
        
        throw new IllegalArgumentException("Unknown campaign interaction status: " + value);
    }
    
    public static CampaignInteractionStatus fromEnglish(String value) {
        if (value == null) {
            throw new IllegalArgumentException("Campaign interaction status cannot be null");
        }
        
        for (CampaignInteractionStatus status : values()) {
            if (status.englishName.equalsIgnoreCase(value.trim()) || status.name().equalsIgnoreCase(value.trim())) {
                return status;
            }
        }
        
        throw new IllegalArgumentException("Unknown campaign interaction status: " + value);
    }
    
    @Override
    public String toString() {
        return englishName;
    }
}
