package software.amazon.databrew.project;

import software.amazon.awssdk.services.databrew.model.DescribeProjectResponse;
import software.amazon.awssdk.services.databrew.model.Project;
import software.amazon.awssdk.services.databrew.model.Sample;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class ModelHelper {
    public static ResourceModel constructModel(final DescribeProjectResponse project) {
        Map<String, String> tags = project.tags();
        return ResourceModel.builder()
                .datasetName(project.datasetName())
                .name(project.name())
                .recipeName(project.recipeName())
                .sample(buildModelSample(project.sample()))
                .roleArn(project.roleArn())
                .tags(tags != null ? buildModelTags(tags) : null)
                .build();
    }

    public static ResourceModel constructModel(final Project project) {
        Map<String, String> tags = project.tags();
        return ResourceModel.builder()
                .datasetName(project.datasetName())
                .name(project.name())
                .recipeName(project.recipeName())
                .sample(buildModelSample(project.sample()))
                .roleArn(project.roleArn())
                .tags(tags != null ? buildModelTags(tags) : null)
                .build();
    }

    public static Map<String, String> buildTagInputMap(final List<Tag> tagList) {
        Map<String, String> tagMap = new HashMap<>();
        // return null if no Tag specified.
        if (tagList == null) return null;

        for (Tag tag : tagList) {
            tagMap.put(tag.getKey(), tag.getValue());
        }
        return tagMap;
    }

    public static software.amazon.databrew.project.Sample buildModelSample(final Sample requestSample) {
        return requestSample == null ? null : software.amazon.databrew.project.Sample.builder()
                .size(requestSample.size())
                .type(requestSample.typeAsString())
                .build();
    }

    public static Sample buildRequestSample(final software.amazon.databrew.project.Sample modelSample) {
        return modelSample == null ? null : Sample.builder()
                .size(modelSample.getSize())
                .type(modelSample.getType())
                .build();
    }

    public static List<Tag> buildModelTags(final Map<String, String> tags) {
        List<Tag> tagArrayList = new ArrayList<>();
        if (tags == null) return null;
        tags.forEach((k, v) -> tagArrayList.add(Tag.builder().key(k).value(v).build()));
        return tagArrayList;
    }
}