package com.infoclinika.pdx.projection;

import com.infoclinika.pdx.domain.sensitivity.SensitivityResult;

import java.util.Objects;

/**
 * Projection for Sensitivity result entity.
 */
public class SensitivityResultDto {
    private final String sample;
    private final String group;
    private final String subType;

    /**
     * Initializes all fields.
     */
    public SensitivityResultDto(String sample, String subType, String group) {
        this.sample = sample;
        this.subType = subType;
        this.group = group;
    }

    /**
     * Initializes all fields using {@link SensitivityResult} instance.
     */
    public SensitivityResultDto(SensitivityResult result) {
        this.sample = result.getSample().getName();
        this.subType = result.getSample().getSubType();
        this.group = result.getGroup();
    }

    public String getSample() {
        return sample;
    }

    public String getGroup() {
        return group;
    }

    public String getSubType() {
        return subType;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        final SensitivityResultDto that = (SensitivityResultDto) o;
        return Objects.equals(getSample(), that.getSample())
               && Objects.equals(getGroup(), that.getGroup())
               && Objects.equals(getSubType(), that.getSubType());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getSample(), getGroup());
    }

    @Override
    public String toString() {
        return "SensitivityResultDto{"
               + "sample=" + sample
               + ", group='" + group + '\''
               + ", subType='" + subType + '\''
               + '}';
    }
}
