using System;
using System.ServiceModel.DomainServices.Client;
using TaskIt.Web;
using TaskIt.Web.Services;

namespace TaskIt.Core
{
    public interface IDataService
    {
        LoadOperation<Project> GetProjects(long userID, Action<LoadOperation<Project>> loadOperation);
        LoadOperation<Context> GetContexts(long userID, Action<LoadOperation<Context>> loadOperation);
        LoadOperation<Contact> GetContacts(long userID, Action<LoadOperation<Contact>> loadOperation);
        LoadOperation<TaskItUser> GetUsers(Action<LoadOperation<TaskItUser>> loadOperation);
        LoadOperation<TaskCategory> GetTaskCategories(Action<LoadOperation<TaskCategory>> loadOperation);
        LoadOperation<Priority> GetPriorities(Action<LoadOperation<Priority>> loadOperation);
        LoadOperation<Task> GetAllTasks(long userID, bool status, bool isCalendarView, Action<LoadOperation<Task>> loadOperation);
        LoadOperation<Task> GetTasksByCategory(long userID, long filterInfoID, bool showCompleted, bool showDue, Action<LoadOperation<Task>> loadOperation);        
        LoadOperation<Task> GetTasksByProject(long userID, long filterInfoID, bool status, bool isCalendarView, Action<LoadOperation<Task>> loadOperation);
        LoadOperation<Task> GetTasksByContext(long userID, long filterInfoID, bool status, bool isCalendarView, Action<LoadOperation<Task>> loadOperation);
        LoadOperation<Task> GetTasksByContact(long userID, long filterInfoID, bool status, bool isCalendarView, Action<LoadOperation<Task>> loadOperation);
        LoadOperation<TaskNote> GetTaskNotes(long taskID, Action<LoadOperation<TaskNote>> loadOperation);
        LoadOperation<ProjectNote> GetProjectNotes(long projectID, Action<LoadOperation<ProjectNote>> loadOperation);
        LoadOperation<ContextNote> GetContextNotes(long contextID, Action<LoadOperation<ContextNote>> loadOperation);
        LoadOperation<ContactNote> GetContactNotes(long contactID, Action<LoadOperation<ContactNote>> loadOperation);
        LoadOperation<Task> GetOverdueTasks(long userID, Action<LoadOperation<Task>> loadOperation);
        LoadOperation<Project> GetProjectsDueThisWeek(long userID, Action<LoadOperation<Project>> loadOperation);
        LoadOperation<Task> GetTasksDueThisWeek(DataContext dataContext, long userID, Action<LoadOperation<Task>> loadOperation);
        //LoadOperation<TasksOverview> GetTasksOverview(Action<LoadOperation<TasksOverview>> loadOperation);
        LoadOperation<Task> GetCompletedBlogPosts(Action<LoadOperation<Task>> loadOperation);
        LoadOperation<Task> GetCompletedVideos(Action<LoadOperation<Task>> loadOperation);
        LoadOperation<Task> GetCompletedWebinars(Action<LoadOperation<Task>> loadOperation);
        InvokeOperation<int> GetTaskCountForContext(long id, Action<InvokeOperation<int>> loadOperation);  
    }
}
