package com.eactive.testmaster.client.mapper;

import com.eactive.testmaster.client.dto.ApiScenarioDTO;
import com.eactive.testmaster.client.entity.ApiScenario;
import com.eactive.testmaster.client.repository.ApiScenarioRepository;
import org.mapstruct.Context;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
@Component
public abstract class ApiScenarioMapper {

    @Autowired
    private ApiScenarioRepository apiScenarioRepository;

    public abstract ApiScenario map(ApiScenarioDTO dto);

    public abstract ApiScenarioDTO map(ApiScenario scenario);

    public ApiScenario map(String id) {
        if(id == null) {
            return null;
        }
        return apiScenarioRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("No ApiScenario found for ID: " + id));
    }

    public String mapToId(ApiScenario scenario) {
        if(scenario == null) {
            return null;
        }
        return scenario.getId();
    }

    public abstract List<ApiScenarioDTO> toDtoList(List<ApiScenario> scenarios);
}
