import {View} from 'react-native';
import {useTranslation} from 'react-i18next';
import {CheckboxController, InputTextAreaController} from '@components';
import Documentation from '@modules/timeOff/components/Documentation';
import {useTimeOffPanelStyle} from '@modules/timeOff/hooks';
import {MakeRequestFormBodyProps} from '@modules/timeOff/screens/MakeRequest/hooks';

import {FormDays} from '../FormDays';
import {FormHours} from '../FormHours';
import {SellBalance} from '../SellBalance';
import SubstituteApproverSwitch from '../SubstituteApproverSwitch';

export function MakeRequestFormBody({
  minDate,
  policyType,
  issuerUserId,
  hasPolicyType,
  datePlaceholder,
  isAdminOnBehalf,
  showSellBalance,
  showAttachments,
  sellBalanceProps,
  showObservations,
  showSkipApproval,
  isEditingRequest,
  policyIsHoursUnit,
  documentationProps,
  substituteApproverProps,
  availableBalanceDaysForBlockRules,
}: MakeRequestFormBodyProps) {
  const {t} = useTranslation();
  const panelStyle = useTimeOffPanelStyle();

  return (
    <>
      {policyIsHoursUnit ? (
        <FormHours
          minDate={minDate}
          datePlaceholder={datePlaceholder}
          minuteInterval={policyType.minimumTimeFraction}
        />
      ) : (
        <FormDays
          minDate={minDate}
          userId={issuerUserId}
          policyType={policyType}
          isAdminOnBehalf={isAdminOnBehalf}
          datePlaceholder={datePlaceholder}
          availableBalanceDays={availableBalanceDaysForBlockRules}
        />
      )}
      {showSellBalance && sellBalanceProps && (
        <SellBalance {...sellBalanceProps} />
      )}
      {showObservations && (
        <View style={panelStyle}>
          <InputTextAreaController
            showFooterMessage
            name="description"
            showCounter={hasPolicyType}
            disabled={isEditingRequest}
            label={t('time_off.observations')}
            placeholder={t('time_off.enter_description')}
          />
        </View>
      )}
      {showAttachments && (
        <View style={panelStyle}>
          <Documentation
            hasError={documentationProps.hasError}
            instructions={documentationProps.instructions}
            initialAttachments={documentationProps.attachments}
            addAttachments={documentationProps.onAddAttachments}
            removeAttachment={documentationProps.onRemoveAttachment}
            loadingAttachments={documentationProps.loadingAttachments}
            setLoadingAttachments={documentationProps.setLoadingAttachments}
          />
        </View>
      )}
      {showSkipApproval && (
        <View style={panelStyle}>
          <CheckboxController
            name="skipApproval"
            title={t('time_off.skip_approval')}
            description={t('time_off.skip_approval_description')}
          />
        </View>
      )}
      {substituteApproverProps && (
        <SubstituteApproverSwitch {...substituteApproverProps} />
      )}
    </>
  );
}
