package com.iqser.red.service.persistence.management.v1.processor.service.persistence;

import java.util.List;

import jakarta.transaction.Transactional;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository;

import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
@SuppressWarnings("PMD.TooManyStaticImports")
public class DossierAttributePersistenceService {

    private final DossierAttributeRepository dossierAttributeRepository;


    @Transactional
    public void insertDossierAttribute(String dossierId, String dossierAttributeId, String dossierAttributeValue) {

        DossierAttributeEntity dossierAttribute = new DossierAttributeEntity();
        dossierAttribute.setId(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId));
        dossierAttribute.setValue(StringUtils.isBlank(dossierAttributeValue) ? null : dossierAttributeValue);
        dossierAttributeRepository.saveAndFlush(dossierAttribute);
    }


    @Transactional
    public void updateDossierAttribute(String dossierId, String dossierAttributeId, String dossierAttributeValue) {

        dossierAttributeRepository.updateDossierAttribute(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId),
                StringUtils.isBlank(dossierAttributeValue) ? null : dossierAttributeValue);
    }


    @Transactional
    public void deleteDossierAttribute(String dossierId) {

        dossierAttributeRepository.deleteByDossierId(dossierId);
    }


    @Transactional
    public void deleteDossierAttribute(String dossierId, String dossierAttributeId) {

        dossierAttributeRepository.deleteById(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId));
    }


    public List<DossierAttributeEntity> getDossierAttributes(String dossierId) {

        return dossierAttributeRepository.findByIdDossierId(dossierId);
    }


    public DossierAttributeEntity findOne(String dossierId, String dossierAttributeId) {

        return dossierAttributeRepository.findById(new DossierAttributeEntity.DossierAttributeEntityId(dossierId, dossierAttributeId))
                .orElseThrow(() -> new NotFoundException("Dossier Attribute not set"));
    }

}
