using System;
using System.ComponentModel;
using System.Collections.Generic;

using BeWo.Scheduler.View;

using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;

using DevExpress.XtraScheduler;

namespace BeWo.Scheduler
{
    public interface ISchedulerViewModel
    {
        SchedulerSettings GetDefaultSchedulerSettings();

		List<CompactCustomerDC> AllCustomers { get; }

		List<CompactEmployeeDC> AllEmployees { get; }

		Dictionary<ValueListEntryDC, List<ResourceDC>> Categories2Resources { get; }

        BindingList<IBeWoAppointment> Appointments { get; }

		Dictionary<Guid, Dictionary<string, Dictionary<string, object>>> ChangedOccurencyCustomFields { get; }

		void SaveAppointments(DevExpress.Xpf.Scheduler.SchedulerControl control, IEnumerable<Appointment> list);

		void DeleteAppointments(DevExpress.Xpf.Scheduler.SchedulerControl control, IEnumerable<Appointment> list);

		void InsertAppointments(DevExpress.Xpf.Scheduler.SchedulerControl control, IEnumerable<Appointment> list);

		AbstractAppointmentEditForm GetEditAppointmentForm(DevExpress.Xpf.Scheduler.SchedulerControl control, Appointment appointment);

		void AddCustomFieldsMapping(DevExpress.Xpf.Scheduler.SchedulerStorage schedulerStorage);

        void InitNewAppointment(Appointment appointment);

        bool FilterAppointment(string filterCategory, object selectedObject, Appointment appointment, bool showPrivateAppointments);

		void InitChangedOccurrencyCustomFields(IEnumerable<SchedulerAppointmentDC> appList);
    }
}
