package com.sn.sowsysrestapi.domain.service;

import com.sn.sowsysrestapi.domain.entity.Report;
import com.sn.sowsysrestapi.domain.entity.Suggestion;
import com.sn.sowsysrestapi.domain.exception.EntityInUseException;
import com.sn.sowsysrestapi.domain.exception.SuggestionNotFoundException;
import com.sn.sowsysrestapi.domain.repository.SuggestionRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Service;

@Service
public class SuggestionService {

    public static final String MSG_ENTITY_IN_USE = "Suggestion with ID %d can't be deleted." +
            " Reason: Other entity is using this entity.";

    @Autowired
    private SuggestionRepo suggestionRepo;

    @Autowired
    private ReportService reportService;

    public Suggestion save(Long reportId, Suggestion suggestion){

        Report report = reportService.findOrFail(reportId);

        suggestion.setReport(report);

        return suggestionRepo.save(suggestion);

    }

    public void delete(Long id) {

        try {
            suggestionRepo.deleteById(id);
            suggestionRepo.flush();

        } catch (EmptyResultDataAccessException e) {
            throw new SuggestionNotFoundException(id);

        } catch (DataIntegrityViolationException e) {
            throw new EntityInUseException(
                    String.format(MSG_ENTITY_IN_USE, id));
        }

    }

    public Suggestion findOrFail(Long id){
        return suggestionRepo.findById(id)
                .orElseThrow(() -> new SuggestionNotFoundException(id));
    }


}
