package com.iqser.red.service.persistence.service.v1.api.shared.model;

import java.util.List;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor
@Schema(description = "Object containing a list of dictionary entries and colors of an entry type.")
public class Dictionary {

    @Schema(description = "The list of dictionary entries of an entry type.")
    private List<String> entries;

    @Schema(description = "The list of false positive entries of an entry type.")
    private List<String> falsePositiveEntries;

    @Schema(description = "The list of false recommendation entries of an entry type.")
    private List<String> falseRecommendationEntries;

    @Schema(description = "The DossierTemplate Id for this type")
    private String dossierTemplateId;

    @Schema(description = "The value of color must be a correct hex color")
    private String hexColor;

    @Schema(description = "The value of color for recommendations must be a correct hex color")
    private String recommendationHexColor;

    @Schema(description = "The value of color for skipped must be a correct hex color")
    private String skippedHexColor;

    @Schema(description = "The rank of this dictionary, higher rank means higher importance.")
    private int rank;

    @Schema(description = "True if the type just for hint, not for redaction, default is false.")
    private boolean hint;

    @Schema(description = "True if the entries in this type should be matched case insensitively, default is false.")
    private boolean caseInsensitive;

    @Schema(description = "True if the type just for recommendations, not for redaction, default is false.")
    private Boolean recommendation;

    @Schema(description = "The description of the dictionary type")
    private String description;

    @Schema(description = "If true the ui will add a action to add values to dictionary")
    private boolean addToDictionaryAction;

    @Schema(description = "Label of the type")
    private String label;

    @Schema(description = "If the Entity has a dictionary")
    private boolean hasDictionary;

    @Schema(description = "If the Entity is a system managed and can not be removed")
    private boolean systemManaged;

    @Schema(description = "If the ui should hide entries of this type by default if they are skipped")
    private boolean autoHideSkipped;

    @Schema(description = "Flag to indicate the dictionary is on dossier level only")
    private boolean dossierDictionaryOnly;

}
