﻿using System;
using System.Collections.Generic;
using System.Linq;
using DAL;

namespace BLL
{
    public class Contato
    {
        private readonly CreateDAL _dal;

        public Contato()
        {
            _dal = new CreateDAL();
        }

        public bool Add(DTO.Contato contato)
        {
            try
            {
                if (contato == null) return false;
                contato.ID = Guid.NewGuid();
                _dal.Contato.Add(contato);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool Delete(DTO.Contato contato)
        {
            try
            {
                if (contato == null) return false;
                _dal.Contato.Delete(contato);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public bool Update(DTO.Contato contato)
        {
            try
            {
                if (contato == null ) return false;
                var temp = GetByID(contato.ID);
                if (temp == null) return false;

                temp.Aniversario = contato.Aniversario;
                temp.Apelido = contato.Apelido;
                temp.DataHoraInclusao = contato.DataHoraInclusao;
                temp.Email = contato.Email;
                temp.Empresa = contato.Empresa;
                temp.Nome = contato.Nome;
                temp.Sobrenome = contato.Sobrenome;
                temp.Telefone = contato.Telefone;
                
                _dal.Contato.Update(temp);
                return true;
            }
            catch
            {
                return false;
            }
        }

        public IEnumerable<DTO.Contato> Get(System.Linq.Expressions.Expression<Func<DTO.Contato, bool>> filter = null, Func<IQueryable<DTO.Contato>, IOrderedQueryable<DTO.Contato>> orderBy = null, string includeProperties = "")
        {
            return _dal.Contato.Get(filter, orderBy, includeProperties);
        }

        // ReSharper disable once InconsistentNaming
        public DTO.Contato GetByID(object id)
        {
            return _dal.Contato.GetByID(id);
        }

        public bool Save()
        {
            try
            {
                _dal.Save();
                return true;
            }
            catch
            {
                return false;
            }
        }

    }
}
