using System;
using System.Collections.Generic;
using System.ServiceModel;

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

namespace BeWo.Service.ServiceContracts
{
    [ServiceContract]
    public interface IEmployeeService
    {
        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void ArchiveEmployee(long pOid, long pVersion);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateAssessmentSheetCategories(List<AssessmentSheetCategoryDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateAssessmentSheetEntries(List<AssessmentSheetEntryDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateAssessmentSheetValues(List<AssessmentSheetValueDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateEmployee(long pOid, long pVersion);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateEmployees(Dictionary<long, long> pOid2Version);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateNewsItems(List<NewsItemDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateTeam(long pOid, long pVersion);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateTeams(Dictionary<long, long> pOid2Version);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeleteEmployee(long pOid, long pVersion);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeleteEmployeeCustomerRelation(long pOid, long pVersion);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeleteEmployeeCustomerRelations(Dictionary<long, long> pOid2Version);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeleteEmployees(Dictionary<long, long> pOid2Version);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactEmployeeDC> FindEmployee(string pFirstName, string pLastName, string pPersonnelNumber);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactTeamDC> FindTeams(string pTeamName, string pLeaderFirstName, string pLeaderLastName);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactEmployeeDC> GetAllActiveAndArchivedEmployeesCompact();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactEmployeeDC> GetAllActiveEmployeesCompact();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactEmployeeDC> GetAllTeamMember(CompactEmployeeDC employee);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<EmploymentTypeDC> GetAllEmploymentTypes();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<long> InsertNewEmploymentTypes(List<EmploymentTypeDC> pEntries);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void UpdateEmploymentTypes(List<EmploymentTypeDC> pEntries);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateEmploymentTypes(Dictionary<long, long> pOid2Version);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<AssessmentSheetCategoryDC> GetAllAssessmentSheetCategories();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<AssessmentSheetEntryDC> GetAllAssessmentSheetEntries();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<AssessmentSheetValueDC> GetAllAssessmentSheetValues();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<EmployeeDC> GetAllEmployees();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<NewsItemDC> GetAllNewsItems();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactTeamDC> GetAllTeamsCompact();

        [FaultContract(typeof (BeWoFault))]
        [OperationContract]
        List<AssessmentSheetEntryDC> GetAssessmentSheetEntriesForCustomer(long customerOid, DateTime startDt,
                                                                          DateTime endDt);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        EmployeeDC GetEmployeeWithPersonOid(long pPersonOid);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactEmployeeDC> GetLastOpenedEmployees();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactTeamDC> GetLastOpenedTeams();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<NewsItemDC> GetPublishedNewsItems();

	    [FaultContract(typeof (BeWoFault))]
	    [OperationContract]
	    List<NewsItemDC> GetPublishedNewsItemsForEmployee(long employeeOid, bool fetchTeamNews);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		void DeleteNewsItem(long pOid, long pVersion);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		long InsertNewNewsItem(NewsItemDC dc);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		long UpdateNewsItem(NewsItemDC dc);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void InsertEmployeeCustomerRelation(CustomerEmployeeRelationDC pRelationDC);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<long> InsertNewAssessmentSheetCategories(List<AssessmentSheetCategoryDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<long> InsertNewAssessmentSheetEntries(List<AssessmentSheetEntryDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<long> InsertNewAssessmentSheetValues(List<AssessmentSheetValueDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        long InsertNewEmployee(EmployeeDC pEmployeeDC);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<long> InsertNewNewsItems(List<NewsItemDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        long InsertNewTeam(TeamDC pTeam);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        TeamDC LoadTeam(long pTeamOid);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        EmployeeDC LoadEmployee(long pEmployeeOid);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void UpdateAssessmentSheetCategories(List<AssessmentSheetCategoryDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void UpdateAssessmentSheetEntries(List<AssessmentSheetEntryDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void UpdateAssessmentSheetValues(List<AssessmentSheetValueDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        long UpdateEmployee(EmployeeDC pEmployeeDC);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void UpdateNewsItems(List<NewsItemDC> dcs);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        long UpdateTeam(TeamDC pTeam);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<AbsenceTimeDC> GetAllEmployeeAbsenceTimes();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        void DeactivateGroupOfPeople(long pOid, long pVersion);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        long InsertNewGroupOfPeople(GroupOfPeopleDC pGroupOfPeople);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        GroupOfPeopleDC LoadGroupOfPeople(long pOid);

        [FaultContract(typeof (BeWoFault))]
        [OperationContract]
        long UpdateGroupOfPeople(GroupOfPeopleDC pGroupOfPeople);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<CompactGroupOfPeopleDC> GetAllGroupsCompact(long? employeeOid);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<GroupOfPeopleDC> GetAllGroups(long? employeeOid);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        CompactTeamDC LoadCompactTeam(long pTeamOid);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        CompactEmployeeDC LoadCompactEmployee(long pEmployeeOid);

        [FaultContract(typeof (BeWoFault))]
        [OperationContract]
        bool IsAssessmentSheetEntryBelongingToAS(long assessmentSheetCategoryOid);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        bool IsAssessmentSheetCategoryBelongingToAS(long assessmentSheetCategoryOid);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		List<OvertimeDC> GetAllOvertimesFromEmployee(long employeeOid);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		List<OvertimeDC> GetAllOvertimes();

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		void DeleteOvertimes(Dictionary<long, long> pOid2Version);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		List<long> InsertOvertimes(List<OvertimeDC> pOvertimes);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		List<long> UpdateOvertimes(List<OvertimeDC> pOvertimes);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
	    List<AuszahlungsartDC> GetAllAuszahlungsarten();

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
	    List<long> InsertAuszahlungsarten(IEnumerable<AuszahlungsartDC> pAuszahlungsarten);

	    [FaultContract(typeof (BeWoFault))]
	    [OperationContract]
	    List<long> UpdateAuszahlungsarten(List<AuszahlungsartDC> pAuszahlungsarten);

		[FaultContract(typeof (BeWoFault))]
	    [OperationContract]
		void DeleteAuszahlungsarten(Dictionary<long, long> pOid2Version);

		[FaultContract(typeof(BeWoFault))]
		[OperationContract]
		List<CompactTeamDC> GetTeamOidsByEmployee(long pEmployeeOid);

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        EmployeeDC LoadLoggedOnEmployee(long pEmployeeOid);

        [FaultContract(typeof (BeWoFault))]
        [OperationContract]
        List<CompactEmployeeDC> GetAllChatActiveEmployeesCompact();

        [FaultContract(typeof(BeWoFault))]
        [OperationContract]
        List<EmployeeAPPCodeDC> GetAllEmployeeAppCodes(long pEmployeeOid);
    }
}