using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using Dominio;
using DAOs;

namespace Web.Controllers
{
    public class HomeController : Controller
    {
        private BancoContext db = new BancoContext();

        // GET: /Home/
        public ActionResult Index()
        {
            return View(db.Pedidos.ToList());
        }

        // GET: /Home/Details/5
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Pedido pedido = db.Pedidos.Find(id);
            if (pedido == null)
            {
                return HttpNotFound();
            }
            return View(pedido);
        }

        // GET: /Home/Create
        public ActionResult Create()
        {
            SelectList selectListClientes = new SelectList(db.Clientes.ToList(), "ClienteId", "Nome");
            ViewData["selectListClientes"] = selectListClientes;

            SelectList selectListProdutos = new SelectList(db.Produtos.ToList(), "ProdutoId", "Nome");
            ViewData["selectListProdutos"] = selectListProdutos;

            return View();
        }

        // POST: /Home/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "PedidoId,Data,Cliente,Produto")] Pedido pedido, Item item)
        {
            if (ModelState.IsValid)
            {

                string idClienteStr = Request.Form["idCliente"];
                string idProdutoStr = Request.Form["idProduto"];
                
                int idCliente = Convert.ToInt16(idClienteStr);
                int idProduto = Convert.ToInt16(idProdutoStr);

                Cliente cliente = db.Clientes.Find(idCliente);
                Produto produto = db.Produtos.Find(idProduto);

                item.Produto = produto;

                List<Item> listItens = new List<Item>();
                listItens.Add(item);
                pedido.Itens = listItens;
                pedido.Cliente = cliente;

                db.Pedidos.Add(pedido);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(pedido);
        }

        // GET: /Home/Edit/5
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            SelectList selectListClientes = new SelectList(db.Clientes.ToList(), "ClienteId", "Nome");
            ViewData["selectListClientes"] = selectListClientes;

            SelectList selectListProdutos = new SelectList(db.Produtos.ToList(), "ProdutoId", "Nome");
            ViewData["selectListProdutos"] = selectListProdutos;

            Pedido pedido = db.Pedidos.Find(id);
            if (pedido == null)
            {
                return HttpNotFound();
            }
            return View(pedido);
        }

        // POST: /Home/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include="PedidoId,Data")] Pedido pedido)
        {
            if (ModelState.IsValid)
            {
                db.Entry(pedido).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(pedido);
        }

        // GET: /Home/Delete/5
        public ActionResult Delete(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Pedido pedido = db.Pedidos.Find(id);
            if (pedido == null)
            {
                return HttpNotFound();
            }
            return View(pedido);
        }

        // POST: /Home/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Pedido pedido = db.Pedidos.Find(id);
            db.Pedidos.Remove(pedido);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
    }
}
