package com.infoclinika.pdx.projection;

import com.infoclinika.pdx.domain.user.SharedView;
import javax.persistence.*;
import java.util.*;
import java.util.stream.Collectors;

/**
 * Represents Shared view (specific user's view state to share with other) domain model.
 */
@Entity
public class SharedViewDto {

    private Long id;

    private String name;

    private String link;

    private String viewPayload;

    private String owner;

    private String description;

    private Date createdOn;

    private List<UserAccountDto> viewers;

    public SharedViewDto() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getViewPayload() {
        return viewPayload;
    }

    public void setViewPayload(String viewPayload) {
        this.viewPayload = viewPayload;
    }

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public Date getCreatedOn() {
        return createdOn;
    }

    public void setCreatedOn(Date createdOn) {
        this.createdOn = createdOn;
    }

    public List<UserAccountDto> getViewers() {
        return viewers;
    }

    public void setViewers(List<UserAccountDto> viewers) {
        this.viewers = viewers;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public static SharedViewDto valueOf(SharedView entity) {
        SharedViewDto dto = new SharedViewDto();

        dto.setId(entity.getId());
        dto.setName(entity.getName());
        dto.setDescription(entity.getDescription());
        dto.setLink(entity.getLink());
        dto.setViewPayload(entity.getViewPayload());
        dto.setOwner(entity.getOwner().getUsername());
        dto.setCreatedOn(entity.getCreatedOn());
        dto.setViewers(UserAccountDto.valueOf(entity.getViewers()));

        return dto;
    }

    public static List<SharedViewDto> valueOf(List<SharedView> entities) {

        if (entities==null)
            return Collections.emptyList();

        return entities.stream().map(SharedViewDto::valueOf).collect(Collectors.toList());
    }
}
