import { ColorsStatus } from "@/constants/ColorsStatus";
import Styles from "@/constants/Styles";
import React, { useState } from "react";
import { Dimensions, Pressable, View } from "react-native";
import Text from "./Text";

type Props = {
   title?: string
   subtitle?: string | React.ReactNode
   icon: React.ReactNode
   desc?: string
   rightTopInfo?: string
   onPress?: () => void
   onLongPress?: () => void
   borderType: 'all' | 'bottom' | 'none'
   leftBottomInfo?: React.ReactNode | string
   rightBottomInfo?: React.ReactNode | string
   titleWeight?: 'normal' | 'bold'
   bgColor?: 'white' | 'transparent'
   width?: number
   descEllipsize?: boolean
   textColor?: string,
   colorPress?: boolean
   titleShowAll?: boolean
}

export default function BorderBottomItem({ title, subtitle, icon, desc, onPress, onLongPress, rightTopInfo, borderType, leftBottomInfo, rightBottomInfo, titleWeight, bgColor, width, descEllipsize, textColor, colorPress, titleShowAll }: Props) {
   const lebarDim = Dimensions.get("window").width;
   const lebar = width ? lebarDim * width / 100 : 'auto';
   const textColorFix = textColor ? textColor : 'black';
   const [isTap, setIsTap] = useState(false);


   return (
      <Pressable onLongPress={onLongPress} onPress={onPress}
         onPressIn={() => setIsTap(true)}
         onPressOut={() => setIsTap(false)}
         style={({ pressed }) => [
            borderType == 'bottom'
               ? Styles.wrapItemBorderBottom
               : borderType == 'all'
                  ? Styles.wrapItemBorderAll
                  : Styles.wrapItemBorderNone,
            bgColor && bgColor == 'white' && ColorsStatus.white,
            // efek warna saat ditekan (sementara)
            isTap && colorPress && ColorsStatus.pressedGray,
         ]}
      >
         <View style={[Styles.rowItemsCenter]}>
            {icon}
            <View style={[Styles.rowSpaceBetween, width ? { width: lebar } : { width: '88%' }]}>
               <View style={[Styles.ml10, rightTopInfo ? { width: '70%' } : { width: '90%' }]}>
                  <Text style={[titleWeight == 'normal' ? Styles.textDefault : Styles.textDefaultSemiBold, { color: textColorFix }]} numberOfLines={titleShowAll ? 0 : 1} ellipsizeMode='tail'>{title}</Text>
                  {
                     subtitle &&
                        typeof subtitle == "string"
                        ? <Text style={[Styles.textMediumNormal, { lineHeight: 15, color: textColorFix }]}>{subtitle}</Text>
                        : <View style={{ alignItems: 'flex-start' }}>
                           {subtitle}
                        </View>
                  }
               </View>
               {
                  rightTopInfo && <Text style={[Styles.textInformation, Styles.mt05, { color: textColorFix }]}>{rightTopInfo}</Text>
               }
            </View>

         </View>
         {desc && <Text style={[Styles.textDefault, Styles.mt05, { textAlign: 'left', color: textColorFix }]} numberOfLines={descEllipsize == false ? 0 : 2} ellipsizeMode='tail'>{desc}</Text>}
         {
            (leftBottomInfo || rightBottomInfo) &&
            (
               <View style={[rightBottomInfo && !leftBottomInfo ? Styles.rowSpaceBetweenReverse : Styles.rowSpaceBetween, Styles.mt05]}>
                  {
                     typeof leftBottomInfo == 'string' ?
                        <Text style={[Styles.textInformation, Styles.cGray]}>{leftBottomInfo}</Text>
                        :
                        leftBottomInfo
                  }
                  {
                     typeof rightBottomInfo == 'string' ?
                        <Text style={[Styles.textInformation, Styles.cGray]}>{rightBottomInfo}</Text>
                        :
                        rightBottomInfo
                  }
               </View>
            )
         }
      </Pressable>
   )
}