package com.social.media.domain.analytics.valueobject;

import com.social.media.domain.shared.exception.BusinessRuleViolationException;

import java.util.Objects;
import java.util.UUID;

/**
 * Analytics Report ID value object
 */
public final class AnalyticsId {
    
    private final String value;
    
    private AnalyticsId(String value) {
        this.value = validateValue(value);
    }
    
    public static AnalyticsId of(String value) {
        return new AnalyticsId(value);
    }
    
    public static AnalyticsId generate() {
        return new AnalyticsId(UUID.randomUUID().toString());
    }
    
    private String validateValue(String value) {
        if (value == null || value.trim().isEmpty()) {
            throw new BusinessRuleViolationException("Analytics ID cannot be null or empty");
        }
        
        String trimmedValue = value.trim();
        if (trimmedValue.length() < 3) {
            throw new BusinessRuleViolationException("Analytics ID must have at least 3 characters");
        }
        
        return trimmedValue;
    }
    
    public String getValue() {
        return value;
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        AnalyticsId that = (AnalyticsId) o;
        return Objects.equals(value, that.value);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(value);
    }
    
    @Override
    public String toString() {
        return "AnalyticsId{" + value + "}";
    }
}
