package com.iqser.red.service.peristence.v1.server.integration.service;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;

import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.ReportTemplate;

@Service
public class ReportTemplateProvider {

    @Autowired
    private ReportTemplateClient reportTemplateClient;


    public ReportTemplate provideReportTemplate(String dossierTemplateId) {

        return provideReportTemplate(dossierTemplateId, "test.docx", "content".getBytes());
    }


    public ReportTemplate provideReportTemplate(String dossierTemplateId, String name, byte[] content) {

        return provideReportTemplate(dossierTemplateId, name, content, false, true);
    }


    public ReportTemplate provideReportTemplate(String dossierTemplateId, String name, byte[] content, boolean multiFile, boolean activeByDefault) {

        var template = new MockMultipartFile(name,name,"application/octet-stream", content);
        reportTemplateClient.uploadTemplate(template, dossierTemplateId, multiFile, activeByDefault);

        var tpl = reportTemplateClient.getAvailableReportTemplates(dossierTemplateId)
                .stream()
                .filter(d -> d.getFileName().equalsIgnoreCase(name) && d.isMultiFileReport() == multiFile)
                .findAny();
        assertThat(tpl.isPresent()).isTrue();
        return tpl.get();
    }


    public ReportTemplate provideReportTemplate(String dossierTemplateId, String name) {

        return provideReportTemplate(dossierTemplateId, name, "content".getBytes(), false, true);
    }

}
