// components/EditableText.tsx
import React, { useState, useRef } from 'react';
import { 
  TextInput, 
  TouchableOpacity, 
  StyleSheet, 
  View,
  StyleProp,
  ViewStyle,
  TextStyle 
} from 'react-native';
import { Text } from '@/components/ui/text';
import { Check, Edit2 } from 'lucide-react-native';
import { cn } from '@/lib/utils';
import { useColorScheme } from '@/lib/theme/useColorScheme';
import { useIconColor } from '@/lib/theme/iconUtils';

interface EditableTextProps {
  value: string;
  onChangeText: (text: string) => void;
  style?: StyleProp<ViewStyle>;
  textStyle?: StyleProp<TextStyle>;
  inputStyle?: StyleProp<TextStyle>;
  placeholder?: string;
  placeholderTextColor?: string;
}

export default function EditableText({ 
  value, 
  onChangeText,
  style,
  textStyle,
  inputStyle,
  placeholder,
  placeholderTextColor
}: EditableTextProps) {
  const [isEditing, setIsEditing] = useState(false);
  const [tempValue, setTempValue] = useState(value);
  const inputRef = useRef<TextInput>(null);
  const { isDarkColorScheme } = useColorScheme();
  const { getIconProps } = useIconColor();

  const handleSubmit = () => {
    if (tempValue.trim()) {
      onChangeText(tempValue);
    } else {
      setTempValue(value);
    }
    setIsEditing(false);
  };

  return (
    <View style={[styles.container, style]}>
      {isEditing ? (
        <View className="flex-row items-center bg-secondary rounded-lg px-3 py-2">
          <TextInput
            ref={inputRef}
            value={tempValue}
            onChangeText={setTempValue}
            onBlur={handleSubmit}
            onSubmitEditing={handleSubmit}
            autoFocus
            selectTextOnFocus
            style={[
              styles.input, 
              { color: isDarkColorScheme ? '#FFFFFF' : '#000000' },
              textStyle, 
              inputStyle
            ]}
            placeholder={placeholder}
            placeholderTextColor={placeholderTextColor || isDarkColorScheme ? '#9CA3AF' : '#6B7280'}
          />
          <TouchableOpacity 
            onPress={handleSubmit}
            className="p-2 ml-2"
          >
            <Check 
              size={20} 
              {...getIconProps('success')}
            />
          </TouchableOpacity>
        </View>
      ) : (
        <TouchableOpacity 
          onPress={() => setIsEditing(true)}
          className="flex-col p-2 rounded-lg"
          activeOpacity={0.7}
        >
          <Text 
            className={cn(
              "text-lg font-semibold text-foreground",
              !value && "text-muted-foreground"
            )}
            style={textStyle} 
            numberOfLines={1}
          >
            {value || placeholder}
          </Text>
          <View className="mt-1">
            <View className="flex-row items-center self-start px-1.5 py-1 rounded bg-muted/20">
              <Edit2 
                size={14} 
                {...getIconProps('muted')}
              />
              <Text className="text-xs text-muted-foreground ml-1">Edit</Text>
            </View>
          </View>
        </TouchableOpacity>
      )}
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flexDirection: 'column',
  },
  input: {
    flex: 1,
    fontSize: 18,
    fontWeight: '600',
    padding: 0,
  },
});