package com.TinyPro.service.imp;

import com.TinyPro.entity.dto.CreateLangDto;
import com.TinyPro.entity.po.I18;
import com.TinyPro.entity.po.Lang;
import com.TinyPro.exception.BusinessException;
;
import com.TinyPro.service.ILangService;
import com.TinyPro.jpa.I18Repository;
import com.TinyPro.jpa.LangRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

@Service
public class ILangSerivceImp  implements ILangService {
    @Autowired
    private LangRepository langRepository;
    @Autowired
    private I18Repository i18Repository;

    @Override
    @Transactional
    public ResponseEntity<Lang> create(CreateLangDto createLangDto) {
        Optional<Lang> langOptional = langRepository.findByName(createLangDto.getName());
        if (langOptional.isPresent()) {
            throw new BusinessException("exception.lang.exists", HttpStatus.CONFLICT, null);
        }
        Lang lang = new Lang();
        lang.setName(createLangDto.getName());
        Lang save = langRepository.save(lang);
        return ResponseEntity.ok(save);
    }

    @Override
    public ResponseEntity<List<Lang>> findAll() {
        return ResponseEntity.ok(langRepository.findAll());
    }

    @Override
    @Transactional
    public ResponseEntity<Lang> update(Integer id, CreateLangDto createLangDto) {
        Lang lang = langRepository.findById(Long.valueOf(id)) .orElseThrow(() -> new BusinessException("exception.lang.notExistsCommon", HttpStatus.NOT_FOUND, null));
        lang.setName(createLangDto.getName());
        Lang save = langRepository.save(lang);
        return ResponseEntity.ok(save);
    }

    @Override
    @Transactional
    public ResponseEntity<Lang> remove(Integer id) {
        Lang lang = langRepository.findById(Long.valueOf(id)).orElseThrow(() -> new BusinessException("exception.lang.notExistsCommon", HttpStatus.NOT_FOUND, null));
        i18Repository.deleteByLangId(lang.getId());
        langRepository.deleteById(Long.valueOf(id));
        return ResponseEntity.ok(lang);
    }
}