/// <summary>
        /// Exclui uma foto do sistema.
        /// </summary>
        /// <param name="codigo">código da foto</param>
        /// <returns>caso a foto tenha sido excluida</returns>
        public bool ExcluirFoto(int codigo)
        {
            try
            {
                IFactoryDAO fabrica = FactoryFactoryDAO.GetFabrica();
                IFotoDAO    fotoDAO = fabrica.GetFotoDAO();

                Dominio.Foto foto = fotoDAO.Pesquisar(codigo);

                if (fotoDAO.Excluir(foto.Codigo))
                {
                    this.ExcluirImagemGaleria(foto.Caminho);
                }
                else
                {
                    return(false);
                }

                return(true);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
 /// <summary>
 /// Consulta de uma foto já cadastrada.
 /// </summary>
 /// <param name="codigo">código da foto</param>
 /// <returns>foto referente ao código informado</returns>
 public Dominio.Foto PesquisarFoto(int codigo)
 {
     try
     {
         IFactoryDAO fabrica = FactoryFactoryDAO.GetFabrica();
         IFotoDAO    fotoDAO = fabrica.GetFotoDAO();
         return(fotoDAO.Pesquisar(codigo));
     }
     catch (Exception e)
     {
         throw e;
     }
 }
        /// <summary>
        /// Consulta de fotos cadastradas.
        /// </summary>
        /// <param name="foto">objeto fotos com os parametros de consulta</param>
        /// <returns>lista das fotos referentes a pesquisa.</returns>
        public IList <Dominio.Foto> PesquisarFoto(Dominio.Foto foto, int qtde = 0, int pagina = 0)
        {
            try
            {
                IFactoryDAO fabrica = FactoryFactoryDAO.GetFabrica();
                IFotoDAO    fotoDAO = fabrica.GetFotoDAO();

                return(fotoDAO.Pesquisar(foto, qtde, pagina));
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        /// <summary>
        /// Cadastra uma nova foto em banco,
        /// Salvando todos os tamanhos necessários para galeria.
        /// </summary>
        /// <param name="foto">objetos com os dados da foto</param>
        /// <param name="arquivo">arquivo da foto</param>
        /// <returns>Foto cadastrada com o código gerado</returns>
        public void SalvarFotoServico(HttpPostedFileBase file)
        {
            try
            {
                IFactoryDAO fabrica = FactoryFactoryDAO.GetFabrica();
                IFotoDAO    fotoDAO = fabrica.GetFotoDAO();
                string      caminho = string.Empty;

                Image imagem = Image.FromStream(file.InputStream);

                double Proporcao = 0;

                // Para manter a proporcao da imagem eh necessario verificar se a imagem eh horizontal ou vertical
                if (imagem.Size.Width > imagem.Size.Height)
                {
                    Proporcao = (double)imagem.Size.Height / (double)imagem.Size.Width;
                }
                else
                {
                    Proporcao = (double)imagem.Size.Width / (double)imagem.Size.Height;
                }

                foreach (dynamic tamanho in tamanhosServico)
                {
                    caminho = string.Format("{0}\\{1}\\{2}", HttpContext.Current.Server.MapPath("~/AppData/Foto/logo/servicos"), tamanho.caminho, file.FileName);

                    if (imagem.Size.Width > imagem.Size.Height)
                    {
                        this.SalvarImagem
                        (
                            this.RedimensionarImagem(file.InputStream, tamanho.largura, (int)(tamanho.largura * Proporcao)),
                            caminho
                        );
                    }
                    else
                    {
                        this.SalvarImagem
                        (
                            this.RedimensionarImagem(file.InputStream, (int)(tamanho.largura * Proporcao), tamanho.largura),
                            caminho
                        );
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        /// <summary>
        /// Cadastra uma nova foto em banco
        /// </summary>
        /// <param name="foto">objetos com os dados da foto</param>
        /// <param name="arquivo">arquivo da foto</param>
        /// <returns>Foto cadastrada com o código gerado</returns>
        public Dominio.Foto SalvarFoto(Dominio.Foto foto, HttpPostedFileBase file)
        {
            try
            {
                if (foto == null)
                {
                    throw new ArgumentNullException("foto");
                }

                IFactoryDAO fabrica = FactoryFactoryDAO.GetFabrica();
                IFotoDAO    fotoDAO = fabrica.GetFotoDAO();
                string      path    = "~/AppData/Foto/";

                foto.Caminho = string.Format("Usuario/{0}.jpg", foto.Legenda);

                this.SalvarImagem
                (
                    this.RedimensionarImagem(file.InputStream, 90, 90), HttpContext.Current.Server.MapPath(path + foto.Caminho)
                );

                foto.Galeria = false;

                if (foto.Codigo == 0)
                {
                    return(fotoDAO.Cadastrar(foto));
                }

                fotoDAO.Alterar(foto);

                return(foto);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        /// <summary>
        /// Cadastra uma nova foto em banco,
        /// Salvando todos os tamanhos necessários para galeria.
        /// </summary>
        /// <param name="foto">objetos com os dados da foto</param>
        /// <param name="arquivo">arquivo da foto</param>
        /// <returns>Foto cadastrada com o código gerado</returns>
        public Dominio.Foto SalvarFotoGaleria(Dominio.Foto foto, HttpPostedFileBase file)
        {
            try
            {
                // TODO: verificar transação
                // using (TransactionScope transacao = new TransactionScope())
                //{
                if (foto == null)
                {
                    throw new ArgumentNullException("foto");
                }

                IFactoryDAO fabrica = FactoryFactoryDAO.GetFabrica();
                IFotoDAO    fotoDAO = fabrica.GetFotoDAO();
                string      caminho = string.Empty;

                foto.Galeria = true;

                if (file != null)
                {
                    Image imagem = Image.FromStream(file.InputStream);

                    foto.Caminho = this.GerarCaminhoImagem(file);
                    double proporcao = 0;

                    if (imagem.Size.Width > imagem.Size.Height)
                    {
                        // imagem horizontal
                        proporcao = (double)imagem.Size.Height / (double)imagem.Size.Width;
                    }
                    else
                    {
                        // imagem vertical
                        proporcao = (double)imagem.Size.Width / (double)imagem.Size.Height;
                    }


                    foreach (dynamic tamanho in tamanhos)
                    {
                        caminho = string.Format("{0}\\{1}\\{2}", HttpContext.Current.Server.MapPath("~/AppData/Foto"), tamanho.caminho, foto.Caminho.Replace("/", @"\"));

                        // Se a imagem for mais larga que 1024px, reduz para esse tamanho e salva
                        if (imagem.Size.Width > 1024 && tamanho.largura == 1024)
                        {
                            if (imagem.Size.Width > imagem.Size.Height)
                            {
                                this.SalvarImagem
                                (
                                    this.RedimensionarImagem(file.InputStream, (int)(((double)tamanho.largura) * proporcao), tamanho.largura),
                                    caminho
                                );
                            }
                            else
                            {
                                this.SalvarImagem
                                (
                                    this.RedimensionarImagem(file.InputStream, tamanho.largura, (int)(((double)tamanho.largura) * proporcao)),
                                    caminho
                                );
                            }
                        }
                        // Se a imagem tiver 1024px ou menos e estiver na hora de salvar a full, mantem o tamanho dela
                        else if (tamanho.largura == 1024)
                        {
                            this.SalvarImagem
                            (
                                this.RedimensionarImagem(file.InputStream, imagem.Size.Height, imagem.Size.Width),
                                caminho
                            );
                        }
                        else// if (tamanho.largura == 300)
                        {
                            if (imagem.Size.Width > imagem.Size.Height)
                            {
                                this.SalvarImagem
                                (
                                    this.RedimensionarImagem(file.InputStream, (int)(((double)tamanho.largura) * proporcao), tamanho.largura),
                                    caminho
                                );
                            }
                            else
                            {
                                this.SalvarImagem
                                (
                                    this.RedimensionarImagem(file.InputStream, tamanho.largura, (int)(((double)tamanho.largura) * proporcao)),
                                    caminho
                                );
                            }
                        }

                        /*else
                         * {
                         *  this.SalvarImagem
                         *  (
                         *      this.RedimensionarImagem(file.InputStream, tamanho.largura, tamanho.altura),
                         *      caminho
                         *  );
                         * }*/
                    }
                }

                if (foto.Codigo == 0)
                {
                    foto = fotoDAO.Cadastrar(foto);
                    //ConteudoMySQL conteudo = new ConteudoMySQL();

                    //foto.Codigo = conteudo.InserirFoto(foto);
                }
                else
                {
                    fotoDAO.Alterar(foto);
                }

                //transacao.Complete();

                return(foto);
                //}
            }
            catch (Exception e)
            {
                throw e;
            }
        }