/**
 * 键盘高度 hook（响应式 padding 方案，参考 BeeCount 的 AnimatedPadding + viewInsets）。
 *
 * 早期版本用 translateY 位移整个弹窗，存在两个问题：
 * 1. 位移后 sheet 原位置空出，露出遮罩色 → "键盘和弹窗之间有留白"。
 * 2. Modal 内键盘事件可能误触发 → "一打开就有留白"。
 *
 * 正确做法（Flutter/RN 通用）：监听键盘高度，组件用它做 paddingBottom。
 * 键盘弹出 → paddingBottom 增大，把内容（含按钮）顶到键盘上方；
 * 键盘关闭 → paddingBottom 回到 0，无残留。
 *
 * @returns 当前键盘高度（px）。键盘未弹出时为 0。
 *
 * @example
 * const kbHeight = useKeyboardHeight();
 * <View style={{ paddingBottom: 16 + kbHeight }}>...</View>
 */
import { useEffect, useState } from 'react';
import { Keyboard, KeyboardEvent, Platform } from 'react-native';

export function useKeyboardHeight(): number {
  const [height, setHeight] = useState(0);

  useEffect(() => {
    const onShow = (e: KeyboardEvent) => {
      setHeight(e.endCoordinates.height);
    };
    const onHide = () => {
      setHeight(0);
    };
    // iOS 用 Will（跟随键盘动画），Android 用 Did（Android 无 Will 事件）
    const showSub = Keyboard.addListener(
      Platform.OS === 'ios' ? 'keyboardWillShow' : 'keyboardDidShow',
      onShow,
    );
    const hideSub = Keyboard.addListener(
      Platform.OS === 'ios' ? 'keyboardWillHide' : 'keyboardDidHide',
      onHide,
    );
    return () => {
      showSub.remove();
      hideSub.remove();
    };
  }, []);

  return height;
}
