import { View, Text, Pressable, Dimensions,Image, StyleSheet } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { router, useLocalSearchParams } from 'expo-router';
import { CrossLogoSvg } from '../global/SVG';
import CouponTabViewComponent from '../global/couponTabView';
import { useEffect, useMemo, useState, useRef } from 'react';
import { chargeStationService } from '../../service/chargeStationService';
import BookingTabViewComponent from '../global/bookingTabViewComponent';
import { set } from 'lodash';
import { ChargingDetails, Remark, ElectricityPrice, Special } from '../../service/type/chargeStationType';
import { format, parseISO } from 'date-fns';
const ChargingDetailsPageComponent = () => {
    const screenHeight = Dimensions.get('window').height;
    const params = useLocalSearchParams();
    const [list, setList] = useState<ChargingDetails>({} as ChargingDetails);
    const [time, setTime] = useState<string>('');
  useEffect(() => {
    const fetchData = async () => {
      const res = await chargeStationService.fetchChargingDetails(params.id.toString())
      if (res) {
        // If res is an array, take the first item; otherwise, set as is
        setList(Array.isArray(res) ? res[0] : {} as ChargingDetails);
        // 解析并格式化日期
        const startTime = parseISO(res[0].actual_start_time);
        const endTime = parseISO(res[0].actual_end_time);
        // 格式化为指定格式
        const formattedDate = `${format(startTime, 'yyyy/MM/dd HH:mm:ss')}-${format(endTime, 'HH:mm:ss')}`;
        setTime(formattedDate)
      }
    };
    fetchData();
  }, [])
  const totalPrice = useMemo(() => {
    if (list.total_fee && list.withdraw_fee) {
      let  actual_fee = list.total_fee - list.withdraw_fee
      const value = actual_fee <= 0? '0': actual_fee % 1 === 0? `${actual_fee}`: `${actual_fee.toFixed(1)}`
      return value
    }
    return '0';
  }, [list]);
    return (
        <SafeAreaView className="flex-1 bg-white" edges={['top']}>
            <View style={{ minHeight: screenHeight, flex: 1 }}>
                <View className="mx-[5%]" style={{ marginTop: 25}}>
                  <Pressable
                      onPress={() => {
                          if (router.canGoBack()) {
                              router.back();
                          } else {
                              router.replace('/accountMainPage');
                          }
                      }}
                  >
                    <CrossLogoSvg />
                  </Pressable>
                  <View className="items-center px-3">
                    {/* <View className="flex-3 items-center  justify-end" style={{}}> */}
                    <Image
                        source={require('../../assets/ccLogo.png')}
                        resizeMode="contain"
                        style={{
                            width: screenHeight > 750 ? 200 : 110,
                            height: screenHeight > 750 ? 200 : 110
                        }}
                    />
                    <Text style={styles.totalPrice}>- {totalPrice}</Text>
                    <View style={styles.viewLine}></View>
                    <View className='w-full flex-row justify-between mt-6 pr-10'>
                      <Text style={styles.leftLable}>訂單编號: </Text>
                      <Text style={styles.rightLable}>{list.format_order_id}</Text>
                    </View>
                    <View className='w-full flex-row justify-between my-3 pr-10'>
                      <Text style={styles.leftLable}>充電時間: </Text>
                      <Text style={styles.rightLable}>{time}</Text>
                    </View>
                    <View className='w-full flex-row justify-between pr-10 mb-4'>
                      <Text style={styles.leftLable}>充電站位置:</Text>
                      <Text style={styles.rightLable}>{params.chargeStationName}</Text>
                    </View>
                    <View style={styles.viewLine}></View>
                    <ChargingDataComponent list={list} totalPrice={totalPrice}/>
                    <View style={styles.viewLine}></View>
                    <View className='w-full flex-row justify-between mt-6 pr-10'>
                      <View>
                        <Text style={styles.leftLable}>實付：</Text>
                        {list.promotion_name ? <Text style={{fontSize: 12, color:'#888888'}}>優惠券支付</Text>: null}
                      </View>
                      <Text style={styles.rightLable}>${totalPrice}</Text>
                    </View>
                  </View>
                </View>
                <View style={{ width: "100%",height: 130 }} />
            </View>
        </SafeAreaView>
    );
};
interface ChargingDataComponentProps {
    list: ChargingDetails;
    totalPrice: string;
}
const ChargingDataComponent: React.FC<ChargingDataComponentProps> = ({
    list,
    totalPrice
}) => {
  const [data, setData] = useState<Remark>({} as Remark);
  const [price, setPrice] = useState<number>(0);
   const hasFetchedPrice = useRef(false); // 添加 ref 跟踪是否已获取过价格
  useEffect(() => {
    const data = JSON.parse(list?.remark || '{}') as Remark;
    setData(data)
    if (!list.promotion_name && !hasFetchedPrice.current && list.actual_start_time) {
      chargeStationService.fetchElectricityPrice().then(res => {
        hasFetchedPrice.current = true; // 标记为已调用
        const date = new Date(list.actual_start_time);
        const str = date.toLocaleString('en-US', { weekday: 'short' }).toLowerCase();
        if (res && res.length > 0) { 
          if (data.RushKwh) {
            const obj = (res[1][str as keyof ElectricityPrice]) as Special
            setPrice(obj.price)
          }
          if (data.ElseKwh) {
            const obj = (res[2][str as keyof ElectricityPrice]) as Special
            setPrice(obj.price)
          }
          if (data.OffKwh) {
            const obj = (res[0][str as keyof ElectricityPrice]) as Special
            setPrice(obj.price)
          }
        }
      })
    }
  }, [list.promotion_name, list.actual_start_time, list.remark])
  
  if (!list.promotion_name) {
    return (
      <View>
        {(data.RushKwh) ? 
        <View>
          <View className='w-full flex-row justify-between mt-4 pr-10'>
            <Text style={styles.leftLable}>峰時總電量: </Text>
            <Text style={styles.rightLable}>{data.RushKwh?.toFixed(1)}</Text>
          </View>
          <View className='w-full flex-row justify-between my-3 pr-10'>
              <Text style={styles.leftLable}>峰時電價(09:00-20:59): </Text>
            <Text style={styles.rightLable}>${price}</Text>
          </View>
          <View className='w-full flex-row justify-between pr-10 mb-3'>
            <Text style={styles.leftLable}>峰時總電費:</Text>
            
            <Text style={styles.rightLable}>${totalPrice}</Text>
          </View>
        </View>: null }
        {(data.ElseKwh) ? 
        <View>
          <View className='w-full flex-row justify-between mt-4 pr-10'>
            <Text style={styles.leftLable}>平時總電量: </Text>
            <Text style={styles.rightLable}>{data.RushKwh?.toFixed(1)}</Text>
          </View>
          <View className='w-full flex-row justify-between my-3 pr-10'>
            <Text style={styles.leftLable}>平時電價(09:00-20:59): </Text>

            <Text style={styles.rightLable}>${price}</Text>
          </View>
          <View className='w-full flex-row justify-between pr-10 mb-3'>
            <Text style={styles.leftLable}>平時總電費:</Text>
            
            <Text style={styles.rightLable}>${totalPrice}</Text>
          </View>
        </View>: null }
        {(data.OffKwh) ? 
        <View>
          <View className='w-full flex-row justify-between mt-4 pr-10'>
            <Text style={styles.leftLable}>穀時總電量: </Text>
            <Text style={styles.rightLable}>{data.RushKwh?.toFixed(1)}</Text>
          </View>
          <View className='w-full flex-row justify-between my-3 pr-10'>
              <Text style={styles.leftLable}>穀時電價(09:00-20:59): </Text>
            <Text style={styles.rightLable}>${price}</Text>
          </View>
          <View className='w-full flex-row justify-between pr-10 mb-3'>
            <Text style={styles.leftLable}>穀時總電費:</Text>
            
            <Text style={styles.rightLable}>${totalPrice}</Text>
          </View>
        </View>: null }
      </View>
    )
  } else {
    return (
      <View>
        <View className='w-full flex-row justify-between mt-4 pr-10'>
            <Text style={styles.leftLable}>總電量: </Text>
            <Text style={styles.rightLable}>{data.TotalPower?.toFixed(1)}</Text>
          </View>
          <View className='w-full flex-row justify-between my-3 pr-10'>
              <Text style={styles.leftLable}>電價: </Text>
            <Text style={styles.rightLable}>${list?.connector?.EquipmentID?.StationID?.price}</Text>
          </View>
          <View className='w-full flex-row justify-between pr-10 mb-3'>
            <Text style={styles.leftLable}>總電費: </Text>
            
            <Text style={styles.rightLable}>${totalPrice}</Text>
          </View>
      </View>
    )
  }

}
const styles = StyleSheet.create({
  viewLine: {
    width: '100%',
    height: 1,
    backgroundColor: '#E5E5E5',
  },
  totalPrice: {
    fontSize: 26,
    fontWeight: 'bold',
    marginBottom: 25,
  },
  leftLable: {
    fontSize: 18,
    color:'#888888',
  },
  rightLable: {
    fontSize: 17
  },
})
export default ChargingDetailsPageComponent;
