package com.nisum.mytime.service;

import java.util.HashMap;
import java.util.List;
import java.util.Set;

import org.bson.types.ObjectId;

import com.nisum.mytime.exception.handler.MyTimeException;
import com.nisum.mytime.model.BillingDetails;
import com.nisum.mytime.model.EmpLoginData;
import com.nisum.mytime.model.EmployeeDashboardVO;
import com.nisum.mytime.model.EmployeeRoles;
import com.nisum.mytime.model.Project;
import com.nisum.mytime.model.ProjectTeamMate;

public interface ProjectService {

    List<EmpLoginData> employeeLoginsBasedOnDate(long id, String fromDate,
            String toDate) throws MyTimeException;

    List<HashMap<Object, Object>> getProjects() throws MyTimeException;

    Project addProject(Project project, String loginEmpId) throws MyTimeException;

    String generatePdfReport(long id, String fromDate, String toDate)
            throws MyTimeException;

    EmployeeRoles getEmployeesRole(String emailId);

    void deleteProject(String projectId);

    Project updateProject(Project project, String loginEmpId)throws MyTimeException;

    EmployeeRoles getEmployeesRoleData(String empId);

    List<ProjectTeamMate> getTeamDetails(String empId);
    
    //MT-72
    List<ProjectTeamMate> getProjectInfo(String empId);

    public ProjectTeamMate addProjectTeamMate(ProjectTeamMate projectTeamMate, String loginEmpId)
            throws MyTimeException;

    String updateTeammate(ProjectTeamMate projectTeamMate, String loginEmpId) throws MyTimeException;

    void deleteTeammate(String empId, String projectId, ObjectId id, String loginEmpId);

    List<Project> getProjects(String managerId) throws MyTimeException;

    List<ProjectTeamMate> getMyTeamDetails(String empId);

    List<EmployeeRoles> getUnAssignedEmployees();

    List<ProjectTeamMate> getShiftDetails(String shift);

    List<ProjectTeamMate> getAllProjectDetails();

    List<ProjectTeamMate> getProjectDetails(String projectId,String status);

    public List<ProjectTeamMate> getMyProjectAllocations(String empId);

    List<BillingDetails> getEmployeeBillingDetails(String empId,
            String projectId);

    BillingDetails addEmployeeBillingDetails(BillingDetails billingDetails, String loginEmpId);

    BillingDetails updateEmployeeBilling(BillingDetails billingDetails, String loginEmpId);

    void deleteEmployeeBilling(BillingDetails teamMate);

    public List<EmployeeDashboardVO> getEmployeesDashBoard();

    List<BillingDetails> getEmployeeActiveBillingDetails(String empId,
            String projectId);

    List<BillingDetails> getEmployeeActiveNisumBench(String empId);

    List<BillingDetails> getEmployeeBillingDetailsAll(String empId);

    public void updateShiftDetails(ProjectTeamMate existingTeammate, String loginEmpId);

    public void addShiftDetails(ProjectTeamMate projectTeamMate, String loginEmpId);

    List<ProjectTeamMate> findByAccountAndActiveAndBillableStatus(
            String account, boolean status, String billableStatus);
    
    public String addProjectTeamMateWithCheck(ProjectTeamMate projectTeamMate, String loginEmpId)
            throws MyTimeException;

    public List<HashMap<Object, Object>>  projectsInfoByEmpId(String empId);
    
    public Set<String> accountsAssignedToDl(String empId);
    
    public List<HashMap<Object, Object>> deliveryLeadProjects(String empId) throws MyTimeException;
}
