﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.Mvc;
using Labs.BLL;
using Labs.WebApp.Mvc5.ViewModels;

namespace Labs.WebApp.Mvc5.Controllers
{
				public class HomeController : Controller
				{
								#region [ Index ]

								public ActionResult Index()
								{
												return View();
								}

								#endregion

								#region [ Informações do Upload ]

								[HttpGet]
								public ActionResult UploadInfo()
								{
												return View();
								}

								[HttpPost]
								public ActionResult UploadInfo(UploadInfoViewModel oUploadInfoViewModel)
								{
												return View(oUploadInfoViewModel);
								}

								#endregion

								#region [ Upload Simples ]

								[HttpGet]
								public ActionResult UploadSimples()
								{
												return View();
								}

								[HttpPost]
								public ActionResult UploadSimples(HttpPostedFileBase arquivo)
								{
												if (arquivo != null)
												{
																var diretorio = Server.MapPath("~/App_Data");
																var fileName = Path.GetFileName(arquivo.FileName);

																arquivo.SaveAs(Path.Combine(diretorio, fileName));

																ViewBag.Mensagem = "Arquivo enviado com sucesso!";
												}

												return View();
								} 

								#endregion

								#region [ Upload em Camadas ]

								[HttpGet]
								public ActionResult UploadCamadas()
								{
												return View();
								}

								[HttpPost]
								public ActionResult UploadCamadas(HttpPostedFileBase arquivo)
								{
												if (arquivo != null)
												{
																ArquivoBLL oArquivoBLL = new ArquivoBLL();
																oArquivoBLL.Diretorio = Server.MapPath("~/App_Data");

																oArquivoBLL.SaveFile(arquivo.InputStream, arquivo.FileName);

																ViewBag.Mensagem = "Arquivo enviado com sucesso!";
												}

												return View();
								}

								#endregion

								#region [ Multi-Upload Simples ]

								[HttpGet]
								public ActionResult MultiUploadSimples()
								{
												return View();
								}

								[HttpPost]
								public ActionResult MultiUploadSimples(IEnumerable<HttpPostedFileBase> arquivos)
								{
												var diretorio = Server.MapPath("~/App_Data");

												foreach (var arquivo in arquivos)
												{
																if (arquivo != null)
																{
																				var fileName = Path.GetFileName(arquivo.FileName);
																				arquivo.SaveAs(Path.Combine(diretorio, fileName));

																				ViewBag.Mensagem = "Arquivos enviados com sucesso!";
																}
												}

												return View();
								}

								#endregion

								#region [ Multi-Upload em Camadas ]

								[HttpGet]
								public ActionResult MultiUploadCamadas()
								{
												return View();
								}

								[HttpPost]
								public ActionResult MultiUploadCamadas(IEnumerable<HttpPostedFileBase> arquivos)
								{
												ArquivoBLL oArquivoBLL = new ArquivoBLL();
												oArquivoBLL.Diretorio = Server.MapPath("~/App_Data");
												
												foreach (var arquivo in arquivos)
												{
																if (arquivo != null)
																{
																				oArquivoBLL.SaveFile(arquivo.InputStream, arquivo.FileName);

																				ViewBag.Mensagem = "Arquivos enviados com sucesso!";
																}
												}

												return View();
								}

								#endregion

								#region [ AJAX Upload Simples ]

								[HttpGet]
								public ActionResult AjaxUpload()
								{
												return View();
								}

								[HttpPost]
								public JsonResult AjaxUploadPost()
								{
            AjaxUploadPostViewModel oAjaxUploadSimplesPostViewModel = new AjaxUploadPostViewModel();

            foreach (String file in Request.Files)
            {
                // converte o arquivo enviado
                HttpPostedFileBase arquivoPostado = Request.Files[file] as HttpPostedFileBase;

                if (arquivoPostado != null)
                {
                    // salva o arquivo
                    arquivoPostado.SaveAs(Path.Combine(Server.MapPath("~/App_Data"), Path.GetFileName(arquivoPostado.FileName)));

                    // exibe algumas informações para o objeto json de resposta
                    oAjaxUploadSimplesPostViewModel.IsUploaded = true;
                    oAjaxUploadSimplesPostViewModel.Nome = Path.GetFileName(arquivoPostado.FileName);
                    oAjaxUploadSimplesPostViewModel.Tipo = arquivoPostado.ContentType;
                    oAjaxUploadSimplesPostViewModel.Tamanho = arquivoPostado.ContentLength;
                }
            }

            return new JsonResult { Data = oAjaxUploadSimplesPostViewModel };
								}

        

								#endregion
				}
}