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

import java.util.Optional;

import org.springframework.stereotype.Service;

import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.DateFormatsEntity;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DateFormatsRepository;

import jakarta.transaction.Transactional;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;

@Service
@RequiredArgsConstructor
public class DateFormatsPersistenceService {

    private final DateFormatsRepository dateFormatsRepository;


    @Transactional
    public Optional<DateFormatsEntity> getDateFormats(String dossierTemplateId) {

        return dateFormatsRepository.findByDossierTemplateId(dossierTemplateId);
    }


    public long getVersion(String dossierTemplateId) {

        return dateFormatsRepository.findVersionByDossierTemplateId(dossierTemplateId)
                .orElse(-1L);
    }


    @Transactional
    public void setDateFormats(@NonNull String dateFormats, String dossierTemplateId) {

        dateFormatsRepository.findByDossierTemplateId(dossierTemplateId).ifPresentOrElse(dfe -> {
            dfe.setDossierTemplateId(dossierTemplateId);
            dfe.setValue(dateFormats);
            dfe.setVersion(dfe.getVersion() + 1);
        }, () -> {
            DateFormatsEntity dfe = new DateFormatsEntity();
            dfe.setDossierTemplateId(dossierTemplateId);
            dfe.setValue(dateFormats);
            dfe.setVersion(1);
            dateFormatsRepository.save(dfe);
        });
    }


    @Transactional
    public void setDateFormats(@NonNull String dateFormats, String dossierTemplateId, long version) {

        dateFormatsRepository.findByDossierTemplateId(dossierTemplateId).ifPresentOrElse(dfe -> {
            dfe.setDossierTemplateId(dossierTemplateId);
            dfe.setValue(dateFormats);
            dfe.setVersion(dfe.getVersion() + 1);
        }, () -> {
            DateFormatsEntity dfe = new DateFormatsEntity();
            dfe.setDossierTemplateId(dossierTemplateId);
            dfe.setValue(dateFormats);
            dfe.setVersion(version);
            dateFormatsRepository.save(dfe);
        });
    }

}
