interface AlertButton {
  text: string;
  onPress?: () => void;
  style?: 'default' | 'cancel' | 'destructive';
}

class PlatformAlert {
  alert(title: string, message?: string, buttons?: AlertButton[]) {
    const overlay = this.createOverlay();
    const modal = this.createModal(title, message, buttons, overlay);

    document.body.appendChild(overlay);
    overlay.appendChild(modal);

    requestAnimationFrame(() => {
      overlay.style.opacity = '1';
      modal.style.transform = 'translateY(0)';
    });
  }

  private createOverlay(): HTMLDivElement {
    const overlay = document.createElement('div');
    Object.assign(overlay.style, {
      position: 'fixed',
      top: '0',
      left: '0',
      right: '0',
      bottom: '0',
      backgroundColor: 'rgba(5, 5, 5, 0.68)',
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'center',
      zIndex: '9999',
      opacity: '0',
      transition: 'opacity 200ms ease-out',
    });
    return overlay;
  }

  private createModal(
    title: string,
    message?: string,
    buttons?: AlertButton[],
    overlay?: HTMLDivElement
  ): HTMLDivElement {
    const modal = document.createElement('div');
    Object.assign(modal.style, {
      backgroundColor: '#121216',
      borderRadius: '24px',
      padding: '28px',
      maxWidth: '360px',
      width: 'calc(100% - 56px)',
      border: '1px solid #1D1E24',
      transform: 'translateY(20px)',
      transition: 'transform 200ms ease-out',
    });

    const titleEl = document.createElement('div');
    Object.assign(titleEl.style, {
      fontSize: '18px',
      fontWeight: '700',
      color: '#F6F7FA',
      marginBottom: message ? '12px' : '24px',
      textAlign: 'center',
    });
    titleEl.textContent = title;
    modal.appendChild(titleEl);

    if (message) {
      const messageEl = document.createElement('div');
      Object.assign(messageEl.style, {
        fontSize: '15px',
        lineHeight: '1.5',
        color: 'rgba(255, 255, 255, 0.75)',
        marginBottom: '24px',
        textAlign: 'center',
      });
      messageEl.textContent = message;
      modal.appendChild(messageEl);
    }

    const buttonContainer = document.createElement('div');
    Object.assign(buttonContainer.style, {
      display: 'flex',
      gap: '12px',
      flexDirection: buttons && buttons.length > 2 ? 'column' : 'row',
    });

    const buttonList = buttons && buttons.length > 0 ? buttons : [{ text: '确定', style: 'default' as const }];

    buttonList.forEach((btn) => {
      const button = document.createElement('button');
      const isDestructive = btn.style === 'destructive';
      const isCancel = btn.style === 'cancel';

      Object.assign(button.style, {
        flex: '1',
        padding: '14px 20px',
        borderRadius: '999px',
        border: isCancel ? '1px solid #1D1E24' : 'none',
        backgroundColor: isDestructive ? '#FF4444' : isCancel ? '#101014' : '#D1FE17',
        color: isDestructive ? '#FFFFFF' : isCancel ? '#8E9098' : '#050505',
        fontSize: '16px',
        fontWeight: '700',
        cursor: 'pointer',
        transition: 'all 150ms ease-out',
      });

      button.textContent = btn.text;

      button.onmouseover = () => {
        button.style.opacity = '0.85';
        button.style.transform = 'translateY(-1px)';
      };

      button.onmouseout = () => {
        button.style.opacity = '1';
        button.style.transform = 'translateY(0)';
      };

      button.onclick = () => {
        this.closeModal(overlay!);
        btn.onPress?.();
      };

      buttonContainer.appendChild(button);
    });

    modal.appendChild(buttonContainer);
    return modal;
  }

  private closeModal(overlay: HTMLDivElement) {
    overlay.style.opacity = '0';
    const modal = overlay.querySelector('div') as HTMLDivElement;
    if (modal) {
      modal.style.transform = 'translateY(20px)';
    }

    setTimeout(() => {
      overlay.remove();
    }, 200);
  }

  toast(message: string, duration: number = 2000) {
    const toast = document.createElement('div');
    Object.assign(toast.style, {
      position: 'fixed',
      bottom: '80px',
      left: '50%',
      transform: 'translateX(-50%) translateY(20px)',
      backgroundColor: '#18181D',
      color: '#F6F7FA',
      padding: '14px 24px',
      borderRadius: '999px',
      fontSize: '15px',
      fontWeight: '600',
      border: '1px solid #1D1E24',
      zIndex: '10000',
      opacity: '0',
      transition: 'all 200ms ease-out',
      maxWidth: 'calc(100% - 56px)',
      textAlign: 'center',
    });

    toast.textContent = message;
    document.body.appendChild(toast);

    requestAnimationFrame(() => {
      toast.style.opacity = '1';
      toast.style.transform = 'translateX(-50%) translateY(0)';
    });

    setTimeout(() => {
      toast.style.opacity = '0';
      toast.style.transform = 'translateX(-50%) translateY(20px)';

      setTimeout(() => {
        toast.remove();
      }, 200);
    }, duration);
  }
}

export const Alert = new PlatformAlert();
