package org.apache.geode.demo.fastfootshoes.application.controller;

import java.util.ArrayList;
import java.util.Collection;

import org.apache.geode.demo.fastfootshoes.model.Product;
import org.apache.geode.demo.fastfootshoes.repositories.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * Controller for working with Products
 * @author lshannon
 *
 */
@Controller
public class ProductController {
	
	@Autowired
	private ProductRepository productRepository;

	@RequestMapping("/productSearch")
	public String productSearch() {
		return "productSearch";
	}

	@RequestMapping(value = "/listSpecificProducts", method = RequestMethod.GET)
	public String listSpecificProducts(
			@RequestParam(value = "brand", required = true) String brand,
			@RequestParam(value = "type", required = true) String type,
			@RequestParam(value = "gender", required = true) String gender,
			@RequestParam(value = "inStock", required = false) boolean inStock,
			Model model) {
		Collection<Product> products;
		if (inStock) {
			products = productRepository.findAllWithStockByBrandTypeGender(brand, type, gender);
		}
		else {
			products = productRepository.findAllByBrandTypeGender(brand, type, gender);
		}
		model.addAttribute("products", products);
		return "listProducts";
	}
	
	@RequestMapping(value = "/showProduct", method = RequestMethod.GET)
	public String showProduct(
			@RequestParam(value = "id", required = true) String id,
			Model model) {
		Collection<Product> products = new ArrayList<Product>();
		Product product = productRepository.findById(id);
		System.out.println("Adding Product: " + product);
		products.add(product);
		model.addAttribute("products", products);
		return "listProducts";
	}



	@RequestMapping(value = "/listAllProducts", method = RequestMethod.GET)
	public String listAllProducts(@RequestParam(value = "inStock", required = true) boolean inStock, Model model) {
		Collection<Product> products;
		if (inStock) {
			products = productRepository.findAllWithStock();
		}
		else {
			products = productRepository.findAll();
		}
		model.addAttribute("products", products);
		return "listProducts";
	}

	public ProductRepository getProductRepository() {
		return productRepository;
	}

	public void setProductRepository(ProductRepository productRepository) {
		this.productRepository = productRepository;
	}

}