import CONSTANTS from "../config/constants";
import staffDB from "../models/staff.model";


export const isUserPartner = async (userType: number, id: number) => {
  if (userType === CONSTANTS.USER_TYPE.STAFF) {
    const staff = await staffDB.getById({ id: id });
    if (!staff) {
      return {isPartner: false, clientId: id};
    }
    let isPartner = staff.role === CONSTANTS.STAFF_ROLES.PARTNER ? true : false;
    let clientId = staff.clientId;
    return {isPartner: isPartner, clientId: clientId};
  }
  else {
    return {isPartnerid: false, clientId: id};
  }
};

export const isUserFinanceAdmin = async (userType: number, id: number) => {
  if (userType === CONSTANTS.USER_TYPE.STAFF) {
    const staff = await staffDB.getById({ id: id });
    if (!staff) {
      return {isFinanceAdmin: false};
    }
    let isFinanceAdmin = staff.role === CONSTANTS.STAFF_ROLES.FINANCE_ADMIN ? true : false;
    let clientId = staff.clientId;
    return {isFinanceAdmin: isFinanceAdmin, clientId: clientId};
  }
  else {
    return {isFinanceAdmin: false};
  }
};

export const isUserSuperAdmin = async (userType: number, id: number) => {
  if (userType === CONSTANTS.USER_TYPE.STAFF) {
    const staff = await staffDB.getById({ id: id });
    if (!staff) {
      return {isSuperAdmin: false};
    }
    let isSuperAdmin = (staff.role === CONSTANTS.STAFF_ROLES.ADMIN && Number(staff.isSuperAdmin) === 1) ? true : false;
    return {isSuperAdmin: isSuperAdmin};
  }
  else {
    return {isSuperAdmin: false};
  }
};

export const staffSalaryModulePermission = async (userType: number, id: number) => {
  if (userType === CONSTANTS.USER_TYPE.STAFF) {
    const staff = await staffDB.getById({ id: id });
    if (!staff) {
      return {staffSalaryPermission: false};
    }
    if ((staff.permissions & (1 << CONSTANTS.PERMISSIONS.MANAGE_STAFF_SALARY)) !== 0) {
      return {staffSalaryPermission: true};
    } else {
      return {staffSalaryPermission: false};
    }
  } else if (userType === CONSTANTS.USER_TYPE.CLIENT) {
    return {staffSalaryPermission: true};
  } else {
    return {staffSalaryPermission: false};
  }
};

export const staffAttendanceModulePermission = async (userType: number, id: number) => {
  if (userType === CONSTANTS.USER_TYPE.STAFF) {
    const staff = await staffDB.getById({ id: id });
    if (!staff) {
      return {staffAttendancePermission: false};
    }
    if ((staff.permissions & (1 << CONSTANTS.PERMISSIONS.MARK_STAFF_ATTENDANCE)) !== 0) {
      return {staffAttendancePermission: true};
    } else {
      return {staffAttendancePermission: false};
    }
  } else if (userType === CONSTANTS.USER_TYPE.CLIENT) {
    return {staffAttendancePermission: true};
  } else {
    return {staffAttendancePermission: false};
  }
};