package ch.unisg.tapastasks.tasks.adapter.out.persistence.mongodb;

import ch.unisg.tapastasks.tasks.domain.Task;
import ch.unisg.tapastasks.tasks.domain.TaskList;

import java.util.Objects;

import org.springframework.stereotype.Component;

@Component
class TaskMapper {

    Task mapToDomainEntity(MongoTaskDocument task) {
        return Task.createTaskWithIdNameTypeOriginaluriStatusInputAndOutputData(
            new Task.TaskId(task.taskId),
            new Task.TaskName(task.taskName),
            new Task.TaskType(task.taskType),
            new Task.OriginalTaskUri(task.originalTaskUri),
            new Task.TaskStatus(Task.Status.valueOf(task.taskStatus)),
            new Task.InputData(task.inputData),
            new Task.OutputData(task.outputData)
        );
    }

    MongoTaskDocument mapToMongoDocument(Task task) {
        return new MongoTaskDocument(
            task.getTaskId().getValue(),
            task.getTaskName().getValue(),
            task.getTaskType().getValue(),
            Objects.isNull(task.getOriginalTaskUri()) ? null : task.getOriginalTaskUri().getValue(),
            task.getTaskStatus().getValue().toString(),
            Objects.isNull(task.getInputData()) ? null : task.getInputData().getValue(),
            Objects.isNull(task.getOutputData()) ? null : task.getOutputData().getValue(),
            TaskList.getTapasTaskList().getTaskListName().getValue()
        );
    }
}
