using salesbook.Shared.Core.Dto;
using salesbook.Shared.Core.Dto.Activity;
using salesbook.Shared.Core.Dto.Contact;
using salesbook.Shared.Core.Entity;
using System.Linq.Expressions;

namespace salesbook.Shared.Core.Interface;

public interface IManageDataService
{
    Task<List<T>> GetTable<T>(Expression<Func<T, bool>>? whereCond = null) where T : new();

    Task<List<AnagClie>> GetClienti(WhereCondContact? whereCond = null);
    Task<List<PtbPros>> GetProspect(WhereCondContact? whereCond = null);
    Task<List<ContactDTO>> GetContact(WhereCondContact whereCond, DateTime? lastSync = null);
    Task<ContactDTO?> GetSpecificContact(string codAnag, bool IsContact);

    Task<List<ActivityDTO>> GetActivityTryLocalDb(WhereCondActivity whereCond);
    Task<List<ActivityDTO>> GetActivity(WhereCondActivity whereCond, bool useLocalDb = false);

    Task InsertOrUpdate<T>(T objectToSave);
    Task InsertOrUpdate<T>(List<T> listToSave);

    Task DeleteProspect(string codPpro);
    Task Delete<T>(T objectToDelete);
    Task DeleteActivity(ActivityDTO activity);

    Task<List<ActivityDTO>> MapActivity(List<StbActivity>? activities);

    Task ClearDb();
}