'use client';

import { Button } from '@/components/ui/button';
import CommonImage from '../CommonImage';
import EditButton from '../forms/EditButton';
import { ConfirmDialog } from '../ConfirmDialog';
import {
  UnknownRecord,
  fnEmpty,
  fnAny,
  HandlePaginatedRecords,
  IColumnConfig,
  BucketProp,
} from '@/types';
import React from 'react';
import InvoicePdfButton from '../buttons/InvoicePdfButton';
import EditSubAgentBonus from '@/components/visa-commission/bonus/sub-agent/EditSubAgentBonus';
import CommonViewAttachmentsButton from '../attachments/CommonViewAttachmentsButton';
import EditCommissionBonus from '@/components/visa-commission/bonus/EditCommissionBonus';
import ViewHistoryButton from '@/components/visa-commission/contracts/buttons/ViewHistoryButton';
import ViewAttachmentsButton from '@/components/visa-commission/contracts/buttons/ViewAttachmentsButton';
import ReceivedRecorded from '@/components/visa-commission/enquiry/form-components/ReceivedRecorded';
import EditCommissionEnquiry from '@/components/visa-commission/enquiry/forms/EditCommissionEnquiry';
import EditCommissionContract from '@/components/visa-commission/contracts/forms/EditCommissionContract';
import EnquiryResponse from '@/components/visa-commission/enquiry/forms/EnquiryResponse';
import CommissionReceivedView from '@/components/visa-commission/common/view/CommissionReceivedView';
import { COMMISSION_CONTRACT_TABLES } from '@/constants';
import EditSubAgentCommission from '@/components/visa-commission/sub-agent/forms/EditSubAgentCommission';
interface ActionButtonsProps {
  columns?: IColumnConfig[];
  bucket: BucketProp['bucket'];
  record: any;
  activeRow: number | null;
  tooltipPosition: { top: number; left: number };
  handleCloseTooltip: fnEmpty;
  adjustedStyle: () => React.CSSProperties;
  handlePaginatedRecords: HandlePaginatedRecords;
  setActiveRow: fnAny;
}

const COMMISSION_BONUS_TABLES = [
  'INSTITUTE_BONUS_RECEIVED',
  'MASTER_AGENT_BONUS_RECEIVED',
];

const COMMISSION_RECEIVED_TABLES = [
  'VISA_COMMISSION_INSTITUTE_RECEIVED',
  'VISA_COMMISSION_MASTER_AGENT_RECEIVED',
];

const COMMISSION_ENQUIRY_TABLES = [
  'VISA_COMMISSION_INSTITUTE_ENQUIRY',
  'VISA_COMMISSION_MASTER_AGENT_ENQUIRY',
];

const ActionButtons = ({
  bucket,
  record,
  activeRow,
  handleCloseTooltip,
  handlePaginatedRecords,
  adjustedStyle,
  setActiveRow,
}: ActionButtonsProps) => {
  if (activeRow === null) return null;

  const handleDelete = () => {
    console.log('Item deleted');
    handleCloseTooltip();
  };

  const hasAnyTrue = Object.values(bucket?.table_row_actions as any).some(
    Boolean,
  );

  return hasAnyTrue ? (
    <div
      className="absolute z-10 bg-white shadow-md p-2 flex gap-2 rounded-md tooltip-table-action"
      style={adjustedStyle()}
      onClick={(e) => {
        e.stopPropagation();
        setTimeout(() => {
          const tooltip = document.querySelector('.tooltip-table-action');
          if (tooltip) {
            tooltip.classList.add('hidden-tooltip');
          }
        }, 100);
      }}
    >
      <Button className="cross-action" onClick={handleCloseTooltip}>
        <CommonImage
          src="/main/cross-arrow.png"
          width={13}
          height={13}
          alt="Close"
          classname="info-icon"
        />
      </Button>

      {bucket?.table_row_actions?.edit && (
        <>
          {COMMISSION_CONTRACT_TABLES.includes(bucket.table_id) ? (
            <EditCommissionContract
              bucket={bucket}
              record={record}
              handlePaginatedRecords={handlePaginatedRecords}
              handleCloseTooltip={handleCloseTooltip}
              setActiveRow={setActiveRow}
            />
          ) : COMMISSION_ENQUIRY_TABLES.includes(bucket.table_id) ? (
            <>
              {(String(record?.accept_status) === '' ||
                record?.accept_status === null) && (
                <EditCommissionEnquiry
                  bucket={bucket}
                  record={record}
                  handlePaginatedRecords={handlePaginatedRecords}
                />
              )}

              {bucket?.table_row_actions?.enquiry_response && (
                <EnquiryResponse
                  bucket={bucket}
                  record={record}
                  handlePaginatedRecords={handlePaginatedRecords}
                />
              )}

              {bucket?.table_row_actions?.enquiry_received &&
                String(record?.received_recorded) !== '1' &&
                (String(record?.accept_status) === '1' ||
                  String(record?.accept_status) === '2') && (
                  <ReceivedRecorded
                    record={record}
                    bucket={bucket}
                    handlePaginatedRecords={handlePaginatedRecords}
                  />
                )}

              {bucket?.table_row_actions?.invoice_download && (
                <InvoicePdfButton record={record} bucketId={bucket.table_id} />
              )}
            </>
          ) : bucket.table_id === 'SUB_AGENT_BONUS' ? (
            <EditSubAgentBonus
              bucket={bucket}
              record={record}
              handlePaginatedRecords={handlePaginatedRecords}
            />
          ) : bucket.table_id === 'SUB_AGENT_COMMISSION' ? (
            <EditSubAgentCommission
              bucket={bucket}
              record={{ ...record, actions: record?.tax_details || [] }}
              handlePaginatedRecords={handlePaginatedRecords}
            />
          ) : COMMISSION_BONUS_TABLES.includes(bucket.table_id) ? (
            <EditCommissionBonus
              bucket={bucket}
              record={record}
              handlePaginatedRecords={handlePaginatedRecords}
            />
          ) : COMMISSION_RECEIVED_TABLES.includes(bucket.table_id) ? (
            <CommissionReceivedView
              bucket={bucket}
              record={record}
              handlePaginatedRecords={handlePaginatedRecords}
            />
          ) : (
            <EditButton
              bucket={bucket}
              recordData={record}
              handlePaginatedRecords={(
                page: number,
                params?: UnknownRecord,
                columns?: IColumnConfig[],
              ) => {
                if (handlePaginatedRecords) {
                  handlePaginatedRecords(page, params, columns || []);
                }
              }}
              handleCloseTooltip={handleCloseTooltip}
              setActiveRow={setActiveRow}
            />
          )}
        </>
      )}

      {bucket?.table_row_actions?.delete && (
        <ConfirmDialog
          message="Do you really want to delete this item? This action cannot be undone."
          onConfirm={handleDelete}
          trigger={
            <Button className="button-action">
              <CommonImage
                src="/main/delete.png"
                width={15}
                height={15}
                alt="Info"
                classname="info-icon"
              />
            </Button>
          }
        />
      )}
      {bucket?.table_row_actions?.view_attachments && (
        <>
          {COMMISSION_CONTRACT_TABLES.includes(bucket.table_id) ? (
            <ViewAttachmentsButton
              bucket={bucket}
              recordData={record}
              handlePaginatedRecords={(
                page: number,
                params?: UnknownRecord,
                columns?: IColumnConfig[],
              ) => {
                if (handlePaginatedRecords) {
                  handlePaginatedRecords(page, params, columns || []);
                }
              }}
              handleCloseTooltip={handleCloseTooltip}
              setActiveRow={setActiveRow}
            />
          ) : (
            <CommonViewAttachmentsButton
              bucket={bucket}
              recordData={record}
              handlePaginatedRecords={(
                page: number,
                params?: UnknownRecord,
                columns?: IColumnConfig[],
              ) => {
                if (handlePaginatedRecords) {
                  handlePaginatedRecords(page, params, columns || []);
                }
              }}
              handleCloseTooltip={handleCloseTooltip}
              setActiveRow={setActiveRow}
            />
          )}
        </>
      )}

      {bucket?.table_row_actions?.view_attachments &&
        record?.vcmCommissionContractsHistories?.length > 0 && (
          <ViewHistoryButton record={record} setActiveRow={setActiveRow} />
        )}
    </div>
  ) : null;
};

export default ActionButtons;
