package fr.mch.mdo.restaurant.controller;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import fr.mch.mdo.restaurant.dto.beans.AcknowledgmentMessage;
import fr.mch.mdo.restaurant.dto.beans.DinnerTableDtoBean;
import fr.mch.mdo.restaurant.dto.beans.ProductDto;
import fr.mch.mdo.restaurant.dto.beans.ProductDtoBean;
import fr.mch.mdo.restaurant.dto.beans.TableHeader;
import fr.mch.mdo.restaurant.exception.MdoException;
import fr.mch.mdo.restaurant.services.business.managers.IOrdersManager;
import fr.mch.mdo.restaurant.services.business.managers.tables.IDinnerTablesManager;
@Controller
@RequestMapping("/orders")
public final class OrdersController //extends AbstractController
{
@Inject
@Named("orders")
protected IOrdersManager manager;// = WebRestaurantBeanFactory.getInstance().getDinnerTablesManager();
@SuppressWarnings({ "rawtypes", "unchecked" })
@RequestMapping(value = "{restaurantId}/tables/{type}", method = RequestMethod.GET)
@ResponseBody
public List<DinnerTableDtoBean> tables(@PathVariable Long restaurantId, @PathVariable String type) throws Exception {
List<?> tables = new ArrayList();//Collections.emptyList();
tables = manager.findAllFreeTables(restaurantId);
return (List<DinnerTableDtoBean>) tables;
}
@RequestMapping(value = "/delete/order/line/{id}", method = RequestMethod.DELETE)
@ResponseBody
public AcknowledgmentMessage deleteOrderLine(@PathVariable Long id) {
AcknowledgmentMessage message = new AcknowledgmentMessage();
return message;
}
@RequestMapping(value = "/table/header/by/number/{number}", method = RequestMethod.GET)
@ResponseBody
public TableHeader tableHeader(@PathVariable String number, Model model) {
TableHeader table = new TableHeader();
return table;
}
@RequestMapping(value = "/delete/table/{id}", method = RequestMethod.DELETE)
@ResponseBody
public AcknowledgmentMessage deleteTable(@PathVariable Long id) {
AcknowledgmentMessage message = new AcknowledgmentMessage();
return message;
}
@RequestMapping(value = "/find/table/by/number/{number}", method = RequestMethod.GET)
@ResponseBody
public DinnerTableDtoBean findTable(@PathVariable String number) {
DinnerTableDtoBean table = new DinnerTableDtoBean();
table.setTableNumber(number);
return table;
}
@RequestMapping(value = "/create/table", method = RequestMethod.POST)
@ResponseBody
public DinnerTableDtoBean createTable(@RequestBody TableHeader header) {
DinnerTableDtoBean table = new DinnerTableDtoBean();
return table;
}
@RequestMapping(value = "{restaurantId}/find/product/{code}", method = RequestMethod.GET)
@ResponseBody
public ProductDto findProduct(@PathVariable Long restaurantId, @PathVariable String code) throws MdoException {
ProductDto product = manager.findProduct(restaurantId, code);
return product;
}
@RequestMapping("{restaurantId}/tables/{type}/view")
public String tablesView(@PathVariable Long restaurantId, @PathVariable String type, Model model) throws Exception {
List<DinnerTableDtoBean> tables = this.tables(restaurantId, type);
model.addAttribute("tables", tables);
return "orders/tables";
}
@RequestMapping(value = "/delete/table/{id}/view", method = RequestMethod.DELETE)
public String deleteTableView(@PathVariable Long id, Model model) {
this.deleteTable(id);
String type = "ALL";
return "redirect:/orders/tables/" + type + "/view";
}
@RequestMapping("/find/table/by/number/{number}/view")
public String findTableView(@PathVariable String number, Model model) {
DinnerTableDtoBean table = this.findTable(number);
model.addAttribute("table", table);
return "orders/table";
}
@RequestMapping(value = "/create/table/view", method = RequestMethod.POST)
public String createTableView(@RequestBody TableHeader header, Model model) {
DinnerTableDtoBean table = this.createTable(header);
return "redirect:/find/table/by/number/{"+ table.getTableNumber() + "}/view";
}
}