import React from 'react';
import { Platform, Pressable, type PressableProps, type StyleProp, type ViewStyle } from 'react-native';
import { useTheme } from '../../theme';

export interface TouchableProps extends Omit<PressableProps, 'style'> {
  /** 按下时的透明度 (不传则使用主题 theme.opacities.pressed 0.7)。 */
  activeOpacity?: number;
  /** 是否禁用 Android 水波纹 (默认 false, 自动开启 android_ripple)。 */
  disableRipple?: boolean;
  /** 支持传统 ViewStyle 数组/对象，或者 Pressable 的动态 style 函数。 */
  style?: StyleProp<ViewStyle> | ((state: { pressed: boolean }) => StyleProp<ViewStyle>);
}

/**
 * 统一交互按压组件（封装 Pressable）。
 * - iOS: 优雅的 opacity 阻尼反馈 (与主题 tokens 对齐)。
 * - Android: 自动配置 android_ripple 边框水波纹。
 */
export function Touchable({ activeOpacity, disableRipple = false, style, children, android_ripple, ...props }: TouchableProps) {
  const { theme } = useTheme();
  const defaultOpacity = activeOpacity ?? theme.opacities.pressed;

  const defaultRipple = !disableRipple && Platform.OS === 'android' ? {
    color: theme.colors.border,
    foreground: true,
    ...android_ripple,
  } : android_ripple;

  return (
    <Pressable
      android_ripple={defaultRipple}
      {...props}
      style={(state) => {
        const resolvedStyle = typeof style === 'function' ? style(state) : style;
        return [
          resolvedStyle,
          state.pressed && { opacity: defaultOpacity },
        ];
      }}
    >
      {children}
    </Pressable>
  );
}
