package com.social.media.domain.user.valueobjects;

import com.social.media.domain.shared.valueobjects.EntityId;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

import java.util.UUID;

/**
 * Type-safe identifier for User entities.
 * 
 * @author Social Media Manager Team
 * @since 2.0.0
 */
public final class UserId extends EntityId {
    
    protected UserId() {
        super();
    }
    
    private UserId(UUID value) {
        super(value);
    }
    
    @JsonCreator
    private UserId(String value) {
        super(value);
    }
    
    /**
     * Generate a new random UserId
     */
    public static UserId newUserId() {
        return new UserId(UUID.randomUUID());
    }
    
    /**
     * Create UserId from UUID
     */
    public static UserId of(UUID value) {
        return new UserId(value);
    }
    
    /**
     * Create UserId from String
     */
    public static UserId of(String value) {
        return new UserId(value);
    }
    
    /**
     * Get the value as String
     */
    public String getValueAsString() {
        return getStringValue();
    }
    
    @JsonValue
    @Override
    public String toString() {
        return getStringValue();
    }
}
