using Dashboard.Dominio.Components;
using Dashboard.Dominio.Interfaces;
using Dashboard.Dominio.Servicos.Relatorios;
using Dashboard.Dominio.ViewModel;
using Infraestrutura.ElmahLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Web.Mvc;

namespace RelatorioIntegracao.Controllers
{
    public class FCVKMProdutidoImprodutivoController : Controller
    {
        // GET: FCVKMProdutidoImprodutivo
        public ActionResult Index(string id = "", int? width = null, int? height = null, string firebird = "", string mysql = "", string filtros = "", string Empresas = "", string requisicaointerna = "")
        {
            try
            {
                Filtro filtro = new Filtro(filtros);

                if (!String.IsNullOrEmpty(Empresas))
                {
                    Empresas = Empresas.Replace("&quot;", "\"");
                    filtro.AddFiltro("empresas", Empresas, String.Empty, Filtro.OPERADOR_LISTA);
                }

                if (!String.IsNullOrEmpty(id))
                    return new JsonResult() { JsonRequestBehavior = JsonRequestBehavior.AllowGet };

                filtro.AddFiltro("data", DateTime.Now.ToString("dd/MM/yyyy"), DateTime.Now.ToString("dd/MM/yyyy"), Filtro.OPERADOR_ENTRE);
                ContextConfigService config = new ContextConfigService();
                var context = config.ConfigMySql(mysql);

                FCVKMProdutidoImprodutivoService service = new FCVKMProdutidoImprodutivoService(context, filtro);
                IBaseViewModel viewModel = (IBaseViewModel)service.GetParams();
                Util.SetRequisicaoInterna = requisicaointerna.Trim().ToLower().Equals("1");

                viewModel.id = id;
                viewModel.width = width;
                viewModel.height = height;
                viewModel.firebird = firebird;
                viewModel.mysql = mysql;
                viewModel.Empresas = Empresas;
                viewModel.filtros = filtros;
                viewModel.ViewAddress = WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/ExportPdf";
                viewModel.ServerAddress = WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna];
                viewModel.dados.Add("ViewAddressVeiculos", WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/LoadVeiculos");
                viewModel.dados.Add("ViewAddressLinhas", WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/LoadLinhas");
                viewModel.dados.Add("ViewAddressData", WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/GetData");
                viewModel.dados.Add("ViewAddressExcel", WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/ExportExcel");
                return View("Params", viewModel);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                return View("../Error/_404");
            }

            return View();
        }

        public JsonResult LoadVeiculos(string firebird = "", string mysql = "", string Empresas = "", string operacoes = "")
        {
            try
            {
                Filtro filtro = new Filtro();

                if (!String.IsNullOrEmpty(Empresas))
                {
                    Empresas = Empresas.Replace("&quot;", "\"");
                    filtro.AddFiltro("empresas", Empresas, String.Empty, Filtro.OPERADOR_LISTA);
                }

                if (!String.IsNullOrEmpty(operacoes))
                {
                    operacoes = operacoes.Replace("&quot;", "\"");
                    filtro.AddFiltro("operacoes", operacoes, String.Empty, Filtro.OPERADOR_LISTA);
                }

                ContextConfigService config = new ContextConfigService();
                var context = config.ConfigMySql(mysql);

                FCVKMProdutidoImprodutivoService service = new FCVKMProdutidoImprodutivoService(context, filtro);
                return Json(service.LoadVeiculos("todos", ""));
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                return null;
            }
        }

        public JsonResult LoadLinhas(string firebird = "", string mysql = "", string Empresas = "", string veiculos = "", string dataInicio = "", string dataFim = "")
        {
            try
            {
                Filtro filtro = new Filtro();

                if (!String.IsNullOrEmpty(Empresas))
                {
                    Empresas = Empresas.Replace("&quot;", "\"");
                    filtro.AddFiltro("empresas", Empresas, String.Empty, Filtro.OPERADOR_LISTA);
                }

                if (!String.IsNullOrEmpty(veiculos))
                {
                    veiculos = veiculos.Replace("&quot;", "\"");
                    filtro.AddFiltro("veiculos", veiculos, String.Empty, Filtro.OPERADOR_LISTA);
                }

                filtro.AddFiltro("data", dataInicio, dataFim, Filtro.OPERADOR_ENTRE);

                ContextConfigService config = new ContextConfigService();
                var context = config.ConfigMySql(mysql);

                FCVKMProdutidoImprodutivoService service = new FCVKMProdutidoImprodutivoService(context, filtro);
                return Json(service.LoadLinhas());
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                return null;
            }
        }

        public ActionResult GetData(string id = "", int? width = null, int? height = null, string firebird = "", string mysql = "", string empresas = "", string dataInicio = "", string dataFim = "", string veiculos = "",
                                    string linhas = "", string tabelas = "", string jornadas = "")
        {
            try
            {
                IBaseViewModel viewModel;
                Filtro filtro = new Filtro();

                if (!String.IsNullOrEmpty(empresas))
                {
                    empresas = empresas.Replace("&quot;", "\"");
                    filtro.AddFiltro("empresas", empresas, String.Empty, Filtro.OPERADOR_LISTA);
                }

                filtro.AddFiltro("data", dataInicio, dataFim, Filtro.OPERADOR_ENTRE);
                filtro.AddFiltro("veiculos", veiculos, "", Filtro.OPERADOR_LISTA);
                filtro.AddFiltro("linhas", linhas, "", Filtro.OPERADOR_LISTA);
                filtro.AddFiltro("tabelas", tabelas, "", Filtro.OPERADOR_LISTA);
                filtro.AddFiltro("jornadas", jornadas, "", Filtro.OPERADOR_LISTA);

                ContextConfigService config = new ContextConfigService();
                var context = config.ConfigMySql(mysql);

                FCVKMProdutidoImprodutivoService service = new FCVKMProdutidoImprodutivoService(context, filtro);
                viewModel = (IBaseViewModel)service.GetData();
                viewModel.id = id;
                viewModel.width = width;
                viewModel.height = height;
                viewModel.firebird = firebird;
                viewModel.mysql = mysql;
                viewModel.filtros = filtro.ToString();
                viewModel.ViewAddress = WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/ExportPdf";
                viewModel.ServerAddress = WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna];
                viewModel.dados.Add("ViewAddressVeiculos", WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/LoadVeiculos");
                viewModel.dados.Add("ViewAddressLinhas", WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/LoadLinhas");
                viewModel.dados.Add("ViewAddressData", WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/GetData");
                viewModel.dados.Add("ViewAddressExcel", WebConfigurationManager.AppSettings[Util.GetRequisicaoInterna] + "FCVKMProdutidoImprodutivo/ExportExcel");
                return View("Index", viewModel);
            }
            catch (Exception ex)
            {
                Logger.Error(ex);
                return View("../Error/_404");
            }
        }
    }
}