package ny2.ats.core.event;

import java.util.UUID;

import ny2.ats.core.data.AbstractData;

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

public abstract class AbstractEvent<T extends AbstractData> implements IEvent<T> {

    // //////////////////////////////////////
    // Field
    // //////////////////////////////////////

    /** イベント作成インスタンスのUUID */
    private UUID creatorUUID;

    /** イベント作成クラス */
    private Class<?> creatorClass;

    // /** 作成時刻 */
    // private LocalDateTime createDateTime;

    // //////////////////////////////////////
    // Constructor
    // //////////////////////////////////////

    public AbstractEvent(UUID creatorUUID, Class<?> creatorClass) {
        this.creatorUUID = creatorUUID;
        this.creatorClass = creatorClass;
        // this.createDateTime = LocalDateTime.now();
    }

    // //////////////////////////////////////
    // Method
    // //////////////////////////////////////

    @Override
    public String toString() {
        // 自分と中身のEventを表示する
        return (new ReflectionToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE).toString()) + " "
                + (new ReflectionToStringBuilder(getContent(), ToStringStyle.SHORT_PREFIX_STYLE).toString());
    }

    // //////////////////////////////////////
    // Getters and Setters
    // //////////////////////////////////////

    @Override
    public UUID getCreatorUUID() {
        return creatorUUID;
    }

    @Override
    public Class<?> getCreatorClass() {
        return creatorClass;
    }

    // public LocalDateTime getCreateDateTime() {
    //      return createDateTime;
    // }
    //
    // public void setCreateDateTime(LocalDateTime createDateTime) {
    //      this.createDateTime = createDateTime;
    // }
}