package com.no1.wms.warehouse;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@Controller
@Slf4j
public class WarehouseController {

	@Autowired
	WarehouseService service;
	
	// 재고 리스트 출력
	@GetMapping("warehouse/list")
	public String list(@RequestParam(name = "searchn", defaultValue = "0") int searchn,
					   @RequestParam(name = "search", defaultValue = "") String search,
					   @RequestParam(name = "p", defaultValue = "1") int page, Model m) {

		int count = service.count(searchn, search);
		
		int perPage = 10; // 한 페이지에 보일 글의 갯수
		int startRow = (page - 1) * perPage;
		
		//스톡서비스로 재고 리스트 출력 메서트 작성
		List<WarehouseDto> dto = service.list(searchn, search, startRow ,perPage);


		m.addAttribute("wlist", dto);
		m.addAttribute("start", startRow + 1);

		//테스트
		System.out.println("list" + dto);
		//테스트
		
		int pageNum = 5;//보여질 페이지 번호 수
		int totalPages = count / perPage + (count % perPage > 0 ? 1 : 0); // 전체 페이지 수
	
		int begin = (page - 1) / pageNum * pageNum + 1;
		int end = begin + pageNum - 1;
		if (end > totalPages) {
			end = totalPages;
		}
		m.addAttribute("searchn", searchn);
		m.addAttribute("search", search);
		m.addAttribute("begin", begin);
		m.addAttribute("end", end);
		m.addAttribute("pageNum", pageNum);
		m.addAttribute("totalPages", totalPages);
		m.addAttribute("p" , page);
		
		return "warehouse/list";
	}
				
	
	// 재고 상세페이지
	@PostMapping("warehouse/read")
	public String read(@RequestParam(name = "searchn", defaultValue = "0") int searchn,
					   @RequestParam(name = "search", defaultValue = "") String search,
					   @RequestParam(name = "p", defaultValue = "1") int page, String id, Model m) {
		//스톡서비스로 재고 상세페이지 출력 메서드 작성

		WarehouseDto One = service.One(id);
		m.addAttribute("One", One);




		int perPage = 5; // 한 페이지에 보일 글의 갯수
		int startRow = (page - 1) * perPage;
		m.addAttribute("start", startRow + 1);

		int warehouseOneCount = service.warehouseOneCount(searchn, search, id);
		List<Map<String, Object>> dto = service.warehouseOne(searchn, search, id, startRow, perPage);
		m.addAttribute("wlist", dto);
		System.out.println("list ::" + dto);

		log.debug("dto테스트 :: " + dto);

		int pageNum = 5;//보여질 페이지 번호 수
		int totalPages = warehouseOneCount / perPage + (warehouseOneCount % perPage > 0 ? 1 : 0); // 전체 페이지 수
		int begin = (page - 1) / pageNum * pageNum + 1;
		int end = begin + pageNum - 1;
		if (end > totalPages) {
			end = totalPages;
		}
		m.addAttribute("searchn", searchn);
		m.addAttribute("search", search);
		m.addAttribute("begin", begin);
		m.addAttribute("end", end);
		m.addAttribute("pageNum", pageNum);
		m.addAttribute("totalPages", totalPages);
		m.addAttribute("p" , page);

		return "warehouse/read";
	}

	
	// 수정 - 폼 
	@PostMapping("/warehouse/update")
	public String update(String id, Model m) {
		WarehouseDto dto = service.One(id);
		m.addAttribute("dto", dto);
		return "warehouse/update";
	}


	// 수정 프로세스
	@PutMapping("/warehouse/update_process")
	@ResponseBody
	public boolean updateProcess(WarehouseDto dto) {

		int i = service.updateWarehouse(dto);
		if (i == 1) {
			return true;
		} else {
			return false;
		}
	}


	// 생성 폼
	@GetMapping("/warehouse/create")
	public String create()
	{
		return "warehouse/create";
	}


	// 생성 프로세스
	@PostMapping("/warehouse/create_process")
	@ResponseBody
	public boolean createProcess(WarehouseDto dto) {
		int i = service.createWarehouse(dto);
		if (i == 1) {
			return true;
		} else {
			return false;
		}
	}


	// 삭제
	@DeleteMapping("/warehouse/delete")
	@ResponseBody
	public int delete(String id) {
		int i = service.deleteWarehouse(id);
		return i;
	}
}
