import { ICountryConfiguration } from '../../../../../Application/Models/CountryConfigurations/CountryConfigurations.types';
import { IUserState } from '../../../Redux/User/type';
import { USER_PRIVILEGES, USER_ROLES } from '../../../Types/Constants';
import {
  ADD_DRIVER,
  ADD_USER,
  ADMIN_SETTINGS,
  ADMIN_USERS,
  ALL_JOBS,
  ALL_USERS,
  ASSOCIATE_GROUP_MANAGEMENT,
  AVAILABLE_JOBS,
  BIDS_TO_CONFIRM,
  MY_DRIVERS,
  COMMISSIONING_SETTINGS,
  COMMON_ADDRESS,
  ADDRESS_MANAGEMENT,
  COMPANY_ADDRESS,
  RATES_MANAGEMENT,
  COMPANY_FEE_SETTINGS,
  COMPANY_MANAGEMENT,
  COMPLETED_JOBS,
  CREATE_NEW_JOB,
  DRIVER_FEE_SETTINGS,
  DRIVER_MANAGEMENT,
  ISidebarConfig,
  JOBS_IN_PROGRESS,
  JOB_BIDS,
  KPI_DASHBOARD,
  MAP_VIEW,
  MARGIN,
  MY_BIDS,
  PENDING_JOBS,
  POSTED_JOBS,
  RELATIONSHIP_MANAGEMENT,
  REPORT,
  REPORT_ONLY,
  SEA_FREIGHT_MANAGEMENT,
  TRANSPORT_MANAGEMENT,
  USER_MANAGEMENT,
  WAITING_FOR_APPROVAL,
  DASHBOARD_MENU,
  DASHBOARD,
  WEEKLY_JOB_METRICS,
  JOB_REPORT,
  MY_JOBS_IN_PROGRESS,
  STATISTICS,
  COUNTRY_SETTINGS,
  INVOICE_REPORTS,
  JOB_NOT_INVOICED,
  JOB_INVOICED,
  COMPLETED_JOBS_MILEAGE,
  OVERDUE_COLLECTION,
  PROFITABILITY_REPORT,
  OVERDUE_DELIVERIES,
  NO_POD_DOCUMENTS,
  CREATE_NEW_ASSIGNED_JOB,
  SCHEDULED_DELIVERY_REPORT,
  SCHEDULED_COLLECTION_REPORT,
  CNTR_DEHIRE_REPORT,
  CNTR_DETENTION_REPORT,
  COMPLETED_JOBS_REPORT,
  COMPLETED_JOBS_MILEAGE_REPORT,
  MPD_REPORTS,
  CUSTOMER_MANAGEMENT,
  ACCOUNT_MANAGEMENT,
  CUSTOMER_JOBS,
  MARKETPLACE_MANAGEMENT,
  MARKETPLACE_MANAGEMENT_STATISTICS_REPORT,
  QUOTES_MANAGEMENT,
  CREATE_A_QUOTE,
  QUOTES,
  ACTIVE_QUOTES,
  PENDING_QUOTES,
  FAILED_QUOTES,
  SUCCESSFUL_QUOTES,
  WAREHOUSE_MANAGEMENT,
  MY_WAREHOUSES,
  MY_STOCKS,
  SCHEDULED_COLLECTION_WAREHOUSE,
  SCHEDULED_DELIVERIES_WAREHOUSE,
  CONTAINERS_ON_SITE,
  STOCK_LEDGER,
  HOME_DASHBOARD,
  NOTIFICATION_SETTINGS
} from './Sidebar.types';

const {
  ADMIN,
  SUPER_ADMIN,
  COMPANY,
  COMPANY_USER,
  ADMIN_USER,
  DRIVER_MANAGER,
  OTHER,
  CUSTOMER,
  WAREHOUSE
} = USER_ROLES;

const {
  CONFIGURATIONS,
  DRIVER_MANAGEMENT: DRIVER_MANAGEMENT_PRIVILEGES,
  TRANSPORT_MANAGEMENT: TRANSPORT_PRIVILEGE,
  SEA_FREIGHT_MANAGEMENT: SEA_FREIGHT_PRIVILEGE,
} = USER_PRIVILEGES;

export const getSidebarConfig = (
  user: IUserState,
  countryConfig?: ICountryConfiguration
): ISidebarConfig => {
  const currentUserType: string = user.response?.type ?? '';
  const userPrivileges: string[] = user.response?.privileges ?? [];
  const isSuperAdmin = [ADMIN, SUPER_ADMIN, ADMIN_USER].includes(
    currentUserType
  );

  const isUserAdmin = [ADMIN_USER].includes(currentUserType);
  const isOther = currentUserType === OTHER;
  const isCompanyExportImport = user.response?.company?.companyType == 'import_exporter';

  const isCustomer = [CUSTOMER].includes(currentUserType);
  const isWarehouse = [WAREHOUSE].includes(currentUserType);



  const isUserCompany = [COMPANY, COMPANY_USER].includes(currentUserType) || isOther;
  const isDriverManager = currentUserType === DRIVER_MANAGER;
  const ratesManagementAccess = user.response?.company?.rates_management_access

  return {
    [DASHBOARD_MENU]: {
      menuValue: DASHBOARD_MENU,
      isExpanded: true,
      items: [
        {
          itemValue: DASHBOARD,
          hide: !isSuperAdmin,

        },
        {
          itemValue: HOME_DASHBOARD,
        },
      ],
    },
    [TRANSPORT_MANAGEMENT]: {
      menuValue: TRANSPORT_MANAGEMENT,
      hide:
        ((isUserAdmin || isOther) && !userPrivileges.includes(TRANSPORT_PRIVILEGE)) ||
        (!countryConfig?.menuSettings.isTransportFreightEnabled &&
          !isSuperAdmin),
      isExpanded: false,
      items: [
        {
          itemValue: MAP_VIEW,
          hide: isDriverManager,
        },
        {
          itemValue: CREATE_NEW_JOB,
          hide: !isSuperAdmin,
        },
        {
          itemValue: CUSTOMER_JOBS,
          hide: !isCustomer,
        },
        {
          itemValue: PENDING_JOBS,
          hide: isDriverManager || isCustomer,
        },
        {
          itemValue: POSTED_JOBS,
          hide: isSuperAdmin || isDriverManager || isCustomer,
        },
        {
          itemValue: ALL_JOBS,
          hide: !isSuperAdmin || isCustomer,
        },
        {
          itemValue: MY_JOBS_IN_PROGRESS,
          hide: isSuperAdmin || isUserAdmin || isDriverManager || isCustomer,
        },
        {
          itemValue: JOBS_IN_PROGRESS,
          hide: isCompanyExportImport || isCustomer
        },
        {
          itemValue: COMPLETED_JOBS,
        },
        // {itemValue: JOB_REPORT,hide: isDriverManager || isUserAdmin},
        // {itemValue: COMPLETED_JOBS_MILEAGE,},
      ],
    },
    [MARKETPLACE_MANAGEMENT]: {
      menuValue: MARKETPLACE_MANAGEMENT,
      isExpanded: false,
      hide: isCustomer,
      items: [{
        itemValue: AVAILABLE_JOBS,
        hide: isDriverManager || isCompanyExportImport || isCustomer,
      },
      {
        itemValue: JOB_BIDS,
        hide: !isSuperAdmin || isCustomer,
      },
      {
        itemValue: BIDS_TO_CONFIRM,
        hide: isSuperAdmin || isDriverManager || isCustomer,
      },

      {
        itemValue: MY_BIDS,
        hide: isSuperAdmin || isDriverManager || isCompanyExportImport || isCustomer,
      }]
    },
    [QUOTES_MANAGEMENT]: {
      menuValue: QUOTES_MANAGEMENT,
      isExpanded: false,
      hide: !isSuperAdmin,
      items: [
        {
          itemValue: CREATE_A_QUOTE
        },
        {
          itemValue: ACTIVE_QUOTES
        },
        {
          itemValue: PENDING_QUOTES
        },
        {
          hide: isDriverManager || isCompanyExportImport || isCustomer,
          itemValue: FAILED_QUOTES
        },
        {
          itemValue: SUCCESSFUL_QUOTES
        },
      ],
    },

    // [SEA_FREIGHT_MANAGEMENT]: {
    //     menuValue: SEA_FREIGHT_MANAGEMENT,
    //     isExpanded: false,
    //     hide: ((isUserAdmin || isOther) && !userPrivileges.includes(SEA_FREIGHT_PRIVILEGE)) || (!countryConfig?.menuSettings.isSeaFreightEnabled && !isSuperAdmin),
    //     items: [
    //         {
    //             itemValue: MAP_VIEW,
    //             hide: isDriverManager

    //         },
    //         {
    //             itemValue: CREATE_NEW_JOB,
    //             hide: isDriverManager

    //         },
    //         {
    //             itemValue: PENDING_JOBS,
    //             hide: isDriverManager

    //         },
    //         {
    //             itemValue: POSTED_JOBS,
    //             hide: isSuperAdmin || isDriverManager
    //         },
    //         {
    //             itemValue: BIDS_TO_CONFIRM,
    //             hide: isSuperAdmin || isDriverManager
    //         },
    //         {
    //             itemValue: MY_BIDS,
    //             hide: isSuperAdmin || isDriverManager
    //         },
    //         {
    //             itemValue: ALL_JOBS,
    //             hide: !isSuperAdmin
    //         },
    //         {
    //             itemValue: AVAILABLE_JOBS,
    //             hide: isDriverManager
    //         },
    //         {
    //             itemValue: JOBS_IN_PROGRESS,
    //         },
    //         {
    //             itemValue: MY_JOBS_IN_PROGRESS,
    //             hide: isSuperAdmin || isUserAdmin || isDriverManager
    //         },
    //         {
    //             itemValue: JOB_BIDS,
    //             hide: !isSuperAdmin
    //         },
    //         {
    //             itemValue: COMPLETED_JOBS,
    //         },
    //         {
    //             itemValue: JOB_REPORT,
    //             hide: isDriverManager || (isUserAdmin)
    //         },
    //     ]
    // },
    [(!isSuperAdmin && !isUserAdmin) ? REPORT_ONLY : REPORT]: {
      menuValue: (!isSuperAdmin && !isUserAdmin) ? REPORT_ONLY : REPORT,
      isExpanded: false,
      items: [
        { itemValue: MARKETPLACE_MANAGEMENT_STATISTICS_REPORT, hide: !isSuperAdmin && !isUserAdmin, },
        { itemValue: INVOICE_REPORTS, hide: !isSuperAdmin && !isUserAdmin },
        { itemValue: JOB_INVOICED, hide: !isSuperAdmin && !isUserAdmin },
        { itemValue: JOB_NOT_INVOICED, hide: !isSuperAdmin && !isUserAdmin },
        { itemValue: OVERDUE_COLLECTION },
        { itemValue: OVERDUE_DELIVERIES },
        { itemValue: NO_POD_DOCUMENTS },
        { itemValue: PROFITABILITY_REPORT, hide: !isSuperAdmin && !isUserAdmin },
        { itemValue: SCHEDULED_COLLECTION_REPORT },
        { itemValue: SCHEDULED_DELIVERY_REPORT },
        { itemValue: CNTR_DEHIRE_REPORT },
        { itemValue: CNTR_DETENTION_REPORT },
        { itemValue: COMPLETED_JOBS_REPORT },
        { itemValue: COMPLETED_JOBS_MILEAGE_REPORT },
        {
          itemValue: MPD_REPORTS,
          hide: !isSuperAdmin || isUserAdmin,
        },
      ],
    },
    [KPI_DASHBOARD]: {
      menuValue: KPI_DASHBOARD,
      isExpanded: false,
      hide: isSuperAdmin || isDriverManager || isCustomer,
      items: [{ itemValue: DASHBOARD }],
    },
    [USER_MANAGEMENT]: {
      menuValue: USER_MANAGEMENT,
      isExpanded: false,
      hide: isDriverManager || isWarehouse || isCustomer,
      items: [
        {
          itemValue: ADD_USER,
        },
        {
          itemValue: ALL_USERS,

        },
        {
          itemValue: ADMIN_USERS,
          hide: !isSuperAdmin || isUserAdmin,
        },
      ],
    },
    [DRIVER_MANAGEMENT]: {
      menuValue: DRIVER_MANAGEMENT,
      isExpanded: false,
      hide:
        isDriverManager || isCustomer || isWarehouse ||
        ((isUserAdmin || isOther) &&
          !userPrivileges.includes(DRIVER_MANAGEMENT_PRIVILEGES)),
      items: [
        {
          itemValue: MY_DRIVERS,
          hide: !isUserCompany,
        },
        {
          itemValue: DRIVER_MANAGEMENT,
          hide: !isSuperAdmin,
        },
        {
          itemValue: ADD_DRIVER,
        },
        {
          itemValue: DRIVER_FEE_SETTINGS,
          hide: !isSuperAdmin,
        },
        {
          itemValue: WAITING_FOR_APPROVAL,
          hide: !isSuperAdmin,
        },
      ],
    },
    [COMPANY_MANAGEMENT]: {
      menuValue: COMPANY_MANAGEMENT,
      isExpanded: false,
      hide: isDriverManager || isCustomer || isWarehouse,
      items: [
        {
          itemValue: RELATIONSHIP_MANAGEMENT,
          hide: !isUserCompany,
        },
        {
          itemValue: ASSOCIATE_GROUP_MANAGEMENT,
          hide: !isUserCompany,
        },
        {
          itemValue: ADDRESS_MANAGEMENT,
          hide: !isUserCompany,
        },
        {
          itemValue: COMPANY_MANAGEMENT,
          hide: !isSuperAdmin,
        },
        {
          itemValue: COMPANY_FEE_SETTINGS,
          hide: !isSuperAdmin,
        },
        {
          itemValue: RATES_MANAGEMENT,
          hide: isSuperAdmin || ratesManagementAccess == false,
        },
      ],
    },
    [CUSTOMER_MANAGEMENT]: {
      menuValue: CUSTOMER_MANAGEMENT,
      isExpanded: false,
      hide: !isCustomer && !isSuperAdmin && !isUserCompany,
      items: [
        {
          hide: isCustomer,
          itemValue: CUSTOMER_MANAGEMENT
        },
        {
          itemValue: ACCOUNT_MANAGEMENT,
          hide: !isCustomer,
        },
      ],
    },
    [WAREHOUSE_MANAGEMENT]: {
      menuValue: WAREHOUSE_MANAGEMENT,
      isExpanded: false,
      hide: !isWarehouse && !isSuperAdmin && !isUserCompany && !isCustomer && isUserCompany,
      items: [
        {
          hide: !(isSuperAdmin || isUserAdmin) || isCustomer,
          itemValue: WAREHOUSE_MANAGEMENT,

        },
        {
          hide: (isSuperAdmin || isUserAdmin) || isCustomer || isWarehouse,
          itemValue: MY_WAREHOUSES,

        },
        {
          itemValue: SCHEDULED_COLLECTION_WAREHOUSE,
        },
        {
          itemValue: SCHEDULED_DELIVERIES_WAREHOUSE,
        },
        {
          itemValue: MY_STOCKS,
        },
        {
          itemValue: CONTAINERS_ON_SITE,
        },
        {
          itemValue: STOCK_LEDGER,
        }
      ],

    },
    [ADMIN_SETTINGS]: {
      menuValue: ADMIN_SETTINGS,
      isExpanded: false,
      hide:
        !isSuperAdmin || isCustomer ||
        ((isUserAdmin || isOther) && !userPrivileges.includes(CONFIGURATIONS)),
      items: [
        {
          itemValue: COMMISSIONING_SETTINGS,
        },
        {
          itemValue: COMMON_ADDRESS,
        },
        {
          itemValue: ADDRESS_MANAGEMENT,
        },
        {
          itemValue: MARGIN,
        },
        {
          itemValue: COUNTRY_SETTINGS,
        },
        {
          itemValue: NOTIFICATION_SETTINGS,
        },
        {
          itemValue: COMPANY_ADDRESS,
        },
        {
          itemValue: RATES_MANAGEMENT,
        },
      ],
    },
  };
};
