package com.dbnt.faisp.codeMgt.service;

import com.dbnt.faisp.codeMgt.model.CodeCatg;
import com.dbnt.faisp.codeMgt.model.CodeMgt;
import com.dbnt.faisp.codeMgt.repository.CodeCatgRepository;
import com.dbnt.faisp.codeMgt.repository.CodeMgtRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@RequiredArgsConstructor
public class CodeMgtService{

  private final CodeMgtRepository codeMgtRepository;
  private final CodeCatgRepository codeCatgRepository;

  @Transactional
  public String saveCode(List<CodeCatg> codeMgtList){
    for(CodeCatg codeCatg: codeMgtList){
      codeCatgRepository.save(codeCatg);
      if (codeCatg.getItemList().size()>0){
        codeItemSave(codeCatg.getItemList());
      }
    }
    return "";
  }

  private void codeItemSave(List<CodeMgt> itemList){
    codeMgtRepository.saveAll(itemList);
  }

  public List<CodeCatg> selectCodeCatgAndChild() {
    List<CodeCatg> codeCatgList = codeCatgRepository.findAll();
    for(CodeCatg codeCatg: codeCatgList){
      codeCatg.setItemList(codeMgtRepository.findByCategoryCdOrderByItemCdAsc(codeCatg.getCategoryCd()));
    }
    return codeCatgList;
  }

  public Map<String, List<CodeMgt>> getCommonCode() {
    //return codeMgtRepository.findByUseChkOrderByItemCdAsc("T");
    List<CodeCatg> categoryList = codeCatgRepository.findAll();
    List<CodeMgt> codeList = codeMgtRepository.findByOrderByItemCdAsc();
    Map<String, List<CodeMgt>> categoryMap = new HashMap<>();
    for(CodeCatg category: categoryList){
      List<CodeMgt> childList = new ArrayList<>();
      for(CodeMgt code: codeList){
        if(code.getCategoryCd().equals(category.getCategoryCd())){
          childList.add(code);
        }
      }
      categoryMap.put(category.getCategoryCd(), childList);
    }
    return categoryMap;
  }

  public List<CodeMgt> selectCodeMgtList(String categoryCd) {
    return codeMgtRepository.findByCategoryCdAndUseChkOrderByItemCdAsc(categoryCd, "T");
  }
}
