using System;
using System.Collections.Generic;
using TimeScheduler.Model;

namespace TimeScheduler.Domain
{
  /// <summary>Schnittstelle zum Provider der die Daten ermitteln</summary>
  public interface IDomain
  {
    /// <summary>Ermittelt die Werte für den angegebenen Tag</summary>
    /// <param name="date">Der Tag für den Werte gesucht werden sollen</param>
    /// <returns>Die Daten, für den angefragten Tag</returns>
    IEnumerable<ITimeItem> GetItems(DateTime date);
    /// <summary>Erzeugt ein neues <see cref="ITimeItem"/>-Element</summary>
    /// <returns>Ein neues <see cref="ITimeItem"/>-Element</returns>
    ITimeItem NewItem();

    /// <summary>Ermittelt die gültigen Kostenstellen</summary>
    /// <returns>Liste der gültigen Kostenstellen</returns>
    Dictionary<int, string> GetCostUnits();

    /// <summary>Fügt ein neues Element hinzu</summary>
    /// <param name="timeItem">Das neue Element</param>
    int ElementAdded(ITimeItem timeItem);
    /// <summary>Verändert ein vorhandenes Element</summary>
    /// <param name="timeItem">die neuen Daten</param>
    void ElementChanged(ITimeItem timeItem);
    /// <summary>Entfernt ein Element</summary>
    /// <param name="timeItem">Das zu entfernende Element</param>
    void ElementRemoved(ITimeItem timeItem);
  }
}
