package pwc.taxtech.atms.dto.vatdto;

import pwc.taxtech.atms.common.util.MyAsserts;
import pwc.taxtech.atms.entity.Project;
import pwc.taxtech.atms.exception.Exceptions;
import pwc.taxtech.atms.vat.entity.PeriodCellTemplate;
import pwc.taxtech.atms.vat.entity.PeriodCellTemplateConfig;
import pwc.taxtech.atms.vat.entity.PeriodTemplate;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class PeriodResources {
    Project project;
    List<PeriodTemplate> periodTemplates = new ArrayList<>();
    List<PeriodCellTemplate> periodCellTemplates = new ArrayList<>();
    List<PeriodCellTemplateConfig> periodCellTemplateConfigs = new ArrayList<>();

    public void setProject(Project project) {
        this.project = project;
    }

    public void putAllTemplate(List<PeriodTemplate> periodTemplates) {
        this.periodTemplates.addAll(periodTemplates);
    }

    public List<Long> getTemolateIds() {
        MyAsserts.assertNotEmpty(periodTemplates, Exceptions.NOT_FOUND_TEMPLATE_EXCEPTION);
        return periodTemplates.stream()
                .map(PeriodTemplate::getTemplateId)
                .collect(Collectors.toList());
    }

    public void putAllCellTemplate(List<PeriodCellTemplate> periodCellTemplates) {
        this.periodCellTemplates.addAll(periodCellTemplates);
    }

    public void putAllCellTemplateConfig(List<PeriodCellTemplateConfig> periodCellTemplateConfigs) {
        this.periodCellTemplateConfigs.addAll(periodCellTemplateConfigs);
    }

    public Long getTemplateGroupId(){
        return  periodTemplates.get(0).getTemplateGroupId();
    }

    public Project getProject() {
        return this.project;
    }

    public List<PeriodTemplate> getPeriodTemplates() {
        return this.periodTemplates;
    }

    public void setPeriodTemplates(List<PeriodTemplate> periodTemplates) {
        this.periodTemplates = periodTemplates;
    }

    public List<PeriodCellTemplate> getPeriodCellTemplates() {
        return this.periodCellTemplates;
    }

    public void setPeriodCellTemplates(List<PeriodCellTemplate> periodCellTemplates) {
        this.periodCellTemplates = periodCellTemplates;
    }

    public List<PeriodCellTemplateConfig> getPeriodCellTemplateConfigs() {
        return this.periodCellTemplateConfigs;
    }

    public void setPeriodCellTemplateConfigs(List<PeriodCellTemplateConfig> periodCellTemplateConfigs) {
        this.periodCellTemplateConfigs = periodCellTemplateConfigs;
    }
}