package sgc.portal.as.as0103.web;

import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import sgc.portal.as.as0103.dto.TcsSearchCodeVo;
import sgc.portal.as.as0103.dto.TcsSearchDeftElpsVo;
import sgc.portal.as.as0103.dto.TcsSearchDeftVo;
import sgc.portal.as.as0103.dto.TcsSearchSiteVo;
import sgc.portal.as.as0103.dto.TcsSearchVo;
import sgc.portal.as.as0103.model.TcsCodeVo;
import sgc.portal.as.as0103.model.TcsDeftElpsVo;
import sgc.portal.as.as0103.model.TcsDeftStatusVo;
import sgc.portal.as.as0103.model.TcsDeftVo;
import sgc.portal.as.as0103.model.TcsSiteVo;
import sgc.portal.as.as0103.service.AS01030001UService;
import sgc.portal.base.exception.BusinessException;
import sgc.portal.com.sym.user.model.UserDetails;

/**
 * 협력업체 하자 확인 및 처리 관련 컨트롤러
 * 
 * @author 5364
 * @since 2022-08-11
 */
@RestController
@RequestMapping("/as/as0103")
public class AS01030001UController {

	/**
	 * 협력업체 하자 확인 및 처리 관련 서비스
	 */
	private final AS01030001UService service;

	/**
	 * 협력업체 하자 확인 및 처리 관련 컨트롤러
	 * 
	 * @param service
	 */
	public AS01030001UController(AS01030001UService service) {
		this.service = service;
	}

	/**
	 * @param userDetails
	 * @param search
	 */
	private TcsSearchVo setFillSearch(UserDetails userDetails, TcsSearchVo search) {
		search.setCmpnCd(userDetails.getCmpnCd());
		String covendId = userDetails.getCovendId();
		search.setCovendId(covendId);
		search.setLginId(userDetails.getLginId());
		if (covendId == null || "".equals(covendId)) {
			throw new BusinessException("협력업체만 접근 가능합니다.");
		}
		return search;
	}

	/**
	 * 하자) 하자처리경과 리스트
	 * 
	 * @param vo
	 * @return
	 */
	@PostMapping("/AS01030001U/selectTcsDeftElpsList")
	public List<TcsDeftElpsVo> selectTcsDeftElpsList(UserDetails userDetails, @RequestBody TcsSearchDeftElpsVo vo) {
		setFillSearch(userDetails, vo);
		return service.selectTcsDeftElpsList(vo);
	}

	/**
	 * 하자) 하자처리경과 보기
	 * 
	 * @param vo
	 * @return
	 */
	@PostMapping("/AS01030001U/selectTcsDeftElpsView")
	public TcsDeftElpsVo selectTcsDeftElpsView(UserDetails userDetails, @RequestBody TcsSearchDeftElpsVo vo) {
		setFillSearch(userDetails, vo);
		return service.selectTcsDeftElpsView(vo);
	}

	/**
	 * 하자) 하자접수처리 리스트
	 * 
	 * @param vo
	 * @return
	 */
	@PostMapping("/AS01030001U/selectTcsDeftList")
	public List<TcsDeftVo> selectTcsDeftList(UserDetails userDetails, @RequestBody TcsSearchDeftVo vo) {
		setFillSearch(userDetails, vo);
		return service.selectTcsDeftList(vo);
	}

	/**
	 * 하자) 하자접수처리 보기
	 * 
	 * @param vo
	 * @return
	 */
	@PostMapping("/AS01030001U/selectTcsDeftView")
	public TcsDeftVo selectTcsDeftView(UserDetails userDetails, @RequestBody TcsSearchDeftVo vo) {
		setFillSearch(userDetails, vo);
		return service.selectTcsDeftView(vo);
	}

	/**
	 * 하자) 하자접수처리 통계 보기
	 * 
	 * @param vo
	 * @return
	 */
	@PostMapping("/AS01030001U/selectTcsDeftStatus")
	public TcsDeftStatusVo selectTcsDeftStatus(UserDetails userDetails, @RequestBody TcsSearchDeftVo vo) {
		setFillSearch(userDetails, vo);
		return service.selectTcsDeftStatus(vo);
	}


	/**
	 * 하자) 하자접수처리 첨부파일 저장
	 * 
	 * @param vo
	 * @return
	 */
	@PostMapping("/AS01030003P/updateTcsDeftAttach")
	public TcsDeftVo updateTcsDeftAtach(UserDetails userDetails, @RequestBody TcsSearchDeftVo vo) {
		setFillSearch(userDetails, vo);
		return service.updateTcsDeftAttach(vo);
	}

	/**
	 * 하자) 하자접수처리 수정/등록
	 * 
	 * @param vo
	 * @return
	 */
	@PostMapping("/AS01030004P/updateTcsDeftElps")
	public TcsDeftElpsVo updateTcsDeftElps(UserDetails userDetails, @RequestBody TcsSearchDeftElpsVo vo) {
		setFillSearch(userDetails, vo);
		return service.updateTcsDeftElps(vo);
	}

	/**
	 * 하자) 하자대상현장 리스트 Popup
	 * 
	 * @param vo
	 * @return
	 */
	@PostMapping("/selectSiteAllPop")
	public List<TcsSiteVo> selectSiteAllPop(UserDetails userDetails, @RequestBody TcsSearchSiteVo vo) {
		setFillSearch(userDetails, vo);
		return service.selectSiteAllPop(vo);
	}

	/**
	 * 하자) 하자대상현장 동 리스트
	 * 
	 * @param siteCd
	 * @return
	 */
	@GetMapping("/donghsno/{siteCd}")
	public List<TcsCodeVo> getSiteDong(UserDetails userDetails, @PathVariable String siteCd) {
		return service.getSiteDongHsno(setFillSearch(userDetails, new TcsSearchVo()), siteCd, "");
	}

	/**
	 * 하자) 하자대상현장 호수 리스트
	 * 
	 * @param siteCd
	 * @param dong
	 * @return
	 */
	@GetMapping("/donghsno/{siteCd}/{dong}")
	public List<TcsCodeVo> getSiteHsno(UserDetails userDetails, @PathVariable String siteCd,
			@PathVariable String dong) {
		return service.getSiteDongHsno(setFillSearch(userDetails, new TcsSearchVo()), siteCd, dong);
	}

	/**
	 * 하자) 하자 코드 정보 리스트
	 * 
	 * @param siteCd
	 * @param dong
	 * @return
	 */
	@PostMapping("/selectCodeList")
	public List<TcsCodeVo> selectCodeList(UserDetails userDetails, @RequestBody TcsSearchCodeVo vo) {
		setFillSearch(userDetails, vo);
		return service.selectCodeList(vo);
	}


}
