package com.bytesw.bytebot.bean;

import com.bytesw.bytebot.model.Channel;
import com.bytesw.bytebot.model.ChannelParam;
import com.google.gson.annotations.Expose;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author Sebastian Chicoma Sandmann
 * @version 10-sep-2020
 * <p>
 * Copyright (c) 2020 Byte, S.A. Todos los derechos reservados.
 * <p>
 * Este software constituye información confidencial y propietaria de Byte, S.A.
 * ("Información Confidencial"). Usted no debe develar dicha Información
 * Confidencial y debe usarla de acuerdo con los términos de aceptación de
 * licencia de uso que firmó con Byte.
 */
@Getter
@Setter
@ToString
public class ChannelBean {

    @Expose
    private Long id;

    @Expose
    private String name;

    @Expose
    private String image;

    @Expose
    private List<ChannelParamBean> parameters;

    @Expose
    private String suggestTitle;

    @Expose
    private String suggestDetail;

    public static ChannelBean clone(Channel channel) {
        ChannelBean bean = new ChannelBean();

        bean.setId(channel.getId());
        bean.setName(channel.getName());
        bean.setImage(channel.getImage());
        bean.setParameters(new ArrayList<>());
        bean.setSuggestTitle(channel.getSuggestTitle());
        bean.setSuggestDetail(channel.getSuggestDetail());

        if (channel.getParameters() != null) {

            Collections.sort(channel.getParameters(), (o1, o2) -> o1.getOrder() - o2.getOrder());

            for (ChannelParam param : channel.getParameters()) {
                bean.getParameters().add(ChannelParamBean.clone(param));
            }
        }

        return bean;
    }
}
