import React from 'react';
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import Divider from '@mui/material/Divider';
import ContentCopyIcon from '@mui/icons-material/ContentCopy';
import ContentPasteIcon from '@mui/icons-material/ContentPaste';
import DeleteIcon from '@mui/icons-material/Delete';
import SelectAllIcon from '@mui/icons-material/SelectAll';
import { Trans } from '@lingui/macro';
import { Shift } from '../../types/shift';

interface ContextMenuState {
  mouseX: number;
  mouseY: number;
  shift?: Shift;
  targetDate?: string;
}

interface ShiftContextMenuProps {
  contextMenu: ContextMenuState | null;
  onClose: () => void;
  copiedShift: Shift | null;
  selectedShiftsCount: number;
  onCopy: () => void;
  onPaste: () => void;
  onDelete: () => void;
  onSelectAllDay: () => void;
  onSelectAllWeek: () => void;
  onBulkDelete: () => void;
}

const ShiftContextMenu: React.FC<ShiftContextMenuProps> = ({
  contextMenu,
  onClose,
  copiedShift,
  selectedShiftsCount,
  onCopy,
  onPaste,
  onDelete,
  onSelectAllDay,
  onSelectAllWeek,
  onBulkDelete,
}) => {
  return (
    <Menu
      open={contextMenu !== null}
      onClose={onClose}
      anchorReference="anchorPosition"
      anchorPosition={
        contextMenu !== null ? { top: contextMenu.mouseY, left: contextMenu.mouseX } : undefined
      }
    >
      {/* Context menu for SHIFT */}
      {contextMenu?.shift && (
        <>
          <MenuItem onClick={onCopy}>
            <ListItemIcon>
              <ContentCopyIcon fontSize="small" />
            </ListItemIcon>
            <ListItemText>
              <Trans>Kopieren</Trans>
            </ListItemText>
          </MenuItem>
          <MenuItem onClick={onPaste} disabled={!copiedShift}>
            <ListItemIcon>
              <ContentPasteIcon fontSize="small" />
            </ListItemIcon>
            <ListItemText>
              <Trans>Einfügen</Trans>
            </ListItemText>
          </MenuItem>
          <MenuItem onClick={onDelete}>
            <ListItemIcon>
              <DeleteIcon fontSize="small" />
            </ListItemIcon>
            <ListItemText>
              <Trans>Löschen</Trans>
            </ListItemText>
          </MenuItem>
          {selectedShiftsCount > 0 && (
            <>
              <Divider />
              <MenuItem
                onClick={() => {
                  onClose();
                  onBulkDelete();
                }}
              >
                <ListItemIcon>
                  <DeleteIcon fontSize="small" color="error" />
                </ListItemIcon>
                <ListItemText>
                  <Trans>Alle ausgewählten Schichten löschen ({selectedShiftsCount})</Trans>
                </ListItemText>
              </MenuItem>
            </>
          )}
        </>
      )}

      {/* Context menu for DAY */}
      {!contextMenu?.shift && contextMenu?.targetDate && (
        <>
          <MenuItem onClick={onPaste} disabled={!copiedShift}>
            <ListItemIcon>
              <ContentPasteIcon fontSize="small" />
            </ListItemIcon>
            <ListItemText>
              <Trans>Einfügen</Trans>
            </ListItemText>
          </MenuItem>
          <MenuItem onClick={onSelectAllDay}>
            <ListItemIcon>
              <SelectAllIcon fontSize="small" />
            </ListItemIcon>
            <ListItemText>
              <Trans>Alle für diesen Tag auswählen</Trans>
            </ListItemText>
          </MenuItem>
          <MenuItem onClick={onSelectAllWeek}>
            <ListItemIcon>
              <SelectAllIcon fontSize="small" />
            </ListItemIcon>
            <ListItemText>
              <Trans>Alle für die Woche auswählen</Trans>
            </ListItemText>
          </MenuItem>
          {selectedShiftsCount > 0 && (
            <>
              <Divider />
              <MenuItem
                onClick={() => {
                  onClose();
                  onBulkDelete();
                }}
              >
                <ListItemIcon>
                  <DeleteIcon fontSize="small" color="error" />
                </ListItemIcon>
                <ListItemText>
                  <Trans>Alle ausgewählten Schichten löschen ({selectedShiftsCount})</Trans>
                </ListItemText>
              </MenuItem>
            </>
          )}
        </>
      )}
    </Menu>
  );
};

export default ShiftContextMenu;
