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

import java.time.OffsetDateTime;
import java.util.HashSet;
import java.util.Set;

import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.DownloadFileType;

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

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Schema(description = "Object containing information about a dossier.")
public class DossierRequest {

    @Schema(description = "The id of the dossier, can be null for create requests.")
    private String dossierId;

    @Schema(description = "The dossierTemplateId for this dossier. can be null for update request.")
    private String dossierTemplateId;

    @NonNull
    @Schema(description = "The name of the dossier. Must be unique.")
    private String dossierName;

    @Schema(description = "The dossier's description (optional).")
    private String description;

    @Schema(description = "The date when the dossier is due.")
    private OffsetDateTime dueDate;

    @Schema(description = "The id of the owning user.")
    private String ownerId;

    @Builder.Default
    @Schema(description = "The id(s) of members associated to this dossier.")
    private Set<String> memberIds = new HashSet<>();

    @Builder.Default
    @Schema(description = "The id(s) of approvers associated to this dossier.")
    private Set<String> approverIds = new HashSet<>();

    @Builder.Default
    @Schema(description = "Download File Types for this dossiers submission package.")
    private Set<DownloadFileType> downloadFileTypes = new HashSet<>();

    @Builder.Default
    @Schema(description = "Id(s) of the word report templates used to generate downloads")
    private Set<String> reportTemplateIds = new HashSet<>();

    @Schema(description = "The watermark id to be applied to the redacted files.")
    private Long watermarkId;

    @Schema(description = "The preview watermark id that  will be applied to the previewed files.")
    private Long previewWatermarkId;

    @Schema(description = "The dossierStatusId for this dossier. can be null for update request.")
    private String dossierStatusId;

}
