import Taro from "@tarojs/taro";
import { View, Image } from "@tarojs/components";
import { useState, useEffect } from "react";
import { formatMoney, getTypeLabel, formatTripDistance, formatNumber, formatTripDurationFromSeconds } from '../../../../../utils/Robotaxi-public-method';

type Props = {
    tripStatus: number;
    fareBreakdown: any;
    orderId?: string;
    resetDetailVersion?: number;
    onToggleDetailFade?: (expanded: boolean, hasFare: boolean) => void;
    handlePay?: () => void;
};

export default function FareDetailCard({
    tripStatus,
    fareBreakdown,
    orderId,
    resetDetailVersion,
    onToggleDetailFade,
    handlePay
}: Props) {
    const [showDetail, setShowDetail] = useState(false); // 费用明细展开状态

    // 外部重置版本变化时收起明细
    useEffect(() => {
        if (typeof resetDetailVersion === 'number') {
            setShowDetail(false);
        }
    }, [resetDetailVersion]);

    // 跳转费用说明页
    const toMoneyDetail = () => {
        Taro.navigateTo({
            url: `/robotaxi/pages/expense-description/index?orderId=${orderId}`
        });
    };

    // 切换明细面板并同步地图淡化状态
    const handleToggleDetail = () => {
        const next = !showDetail;
        setShowDetail(next);
        const hasFare = !!fareBreakdown && (
            Number(fareBreakdown?.orderMoney) > 0 ||
            (Array.isArray(fareBreakdown?.start) && fareBreakdown.start.length > 0) ||
            (Array.isArray(fareBreakdown?.mileage) && fareBreakdown.mileage.length > 0) ||
            (Array.isArray(fareBreakdown?.duration) && fareBreakdown.duration.length > 0) ||
            (Array.isArray(fareBreakdown?.longDistance) && fareBreakdown.longDistance.length > 0) ||
            Number(fareBreakdown?.couponMoney) > 0 ||
            Number(fareBreakdown?.redPacketMoney) > 0
        );
        if (typeof onToggleDetailFade === 'function') {
            onToggleDetailFade(next, hasFare);
        }
    };

    if (![8, 9].includes(tripStatus)) {
        return null;
    }

    return (
        <View className="car-card-end">
            <View className="car-card-line" style="margin:24px 0;"></View>
            <View className="car-card-end-particulars">
                <View className="car-card-end-particulars-money">
                    <View>{formatMoney(
                        (fareBreakdown?.orderMoney - fareBreakdown?.redPacketMoney - fareBreakdown?.couponMoney) <= 0
                            ? 0 : (fareBreakdown?.orderMoney - fareBreakdown?.redPacketMoney - fareBreakdown?.couponMoney))}</View>
                    <View>元</View>
                    {
                        fareBreakdown?.redPacketMoney + fareBreakdown?.couponMoney > 0 &&
                        <View>{formatMoney(fareBreakdown?.orderMoney)}元</View>
                    }
                    {
                        fareBreakdown?.redPacketMoney + fareBreakdown?.couponMoney > 0 &&
                        <View>已优惠{formatMoney(fareBreakdown?.redPacketMoney + fareBreakdown?.couponMoney)}元</View>
                    }
                </View>
                <View className="car-card-end-particulars-view" onClick={handleToggleDetail}>
                    <View>{showDetail ? '收起明细' : '查看明细'}</View>
                    <Image style={{ transform: showDetail ? 'rotate(90deg)' : 'rotate(0deg)', transition: 'transform 0.3s' }} src={require('../../../../assets/ccc-icon-right.png')} />
                </View>
            </View>
            <View className={`particulars-detail ${showDetail ? 'expand' : ''}`}>
                {
                    Number(fareBreakdown?.orderMoney) > 0 &&
                    <View className="particulars-detail-item">
                        <View className="particulars-detail-item-title">
                            <View>订单总额</View>
                            <View>{formatMoney(fareBreakdown?.orderMoney)}元</View>
                        </View>
                    </View>
                }
                {Array.isArray(fareBreakdown?.start) && fareBreakdown.start.length > 0 &&
                    <View className="particulars-detail-item">
                        <View className="particulars-detail-item-title">
                            <View>起步价</View>
                            <View>{formatMoney(fareBreakdown.start.reduce((sum: number, item: any) => sum + (Number(item?.money) || 0), 0))}元</View>
                        </View>
                        {fareBreakdown.start.filter((item: any) => item?.money || item?.time).map((item: any, index: number) => (
                            <View key={`start-${index}`} className="particulars-detail-item-content">
                                <View>{item?.time || '--'}</View>
                                <View>{formatMoney(item?.money)}元</View>
                            </View>
                        ))}
                    </View>
                }
                {Array.isArray(fareBreakdown?.mileage) && fareBreakdown.mileage.length > 0 &&
                    <View className="particulars-detail-item">
                        <View className="particulars-detail-item-title">
                            <View>里程费</View>
                            <View>{formatMoney(fareBreakdown.mileage.reduce((sum: number, item: any) => sum + (Number(item?.money) || 0), 0))}元</View>
                        </View>
                        {fareBreakdown.mileage.filter((item: any) => item?.money || item?.mileage).map((item: any, index: number) => (
                            <View key={`mileage-${index}`} className="particulars-detail-item-content">
                                <View>{getTypeLabel(item?.type)}（{formatTripDistance(item?.mileage)}）</View>
                                <View>{formatMoney(item?.money)}元</View>
                            </View>
                        ))}
                    </View>
                }
                {Array.isArray(fareBreakdown?.duration) && fareBreakdown.duration.length > 0 &&
                    <View className="particulars-detail-item">
                        <View className="particulars-detail-item-title">
                            <View>时长费</View>
                            <View>{formatMoney(fareBreakdown.duration.reduce((sum: number, item: any) => sum + (Number(item?.money) || 0), 0))}元</View>
                        </View>
                        {fareBreakdown.duration.filter((item: any) => item?.money || item?.duration).map((item: any, index: number) => (
                            <View key={`duration-${index}`} className="particulars-detail-item-content">
                                <View>{getTypeLabel(item?.type)}（{formatNumber(item?.duration, 0)}分钟）</View>
                                <View>{formatMoney(item?.money)}元</View>
                            </View>
                        ))}
                    </View>
                }
                {Array.isArray(fareBreakdown?.longDistance) && fareBreakdown.longDistance.length > 0 &&
                    <View className="particulars-detail-item">
                        <View className="particulars-detail-item-title">
                            <View>远途费</View>
                            <View>{formatMoney(fareBreakdown.longDistance.reduce((sum: number, item: any) => sum + (Number(item?.money) || 0), 0))}元</View>
                        </View>
                    </View>
                }
                {Number(fareBreakdown?.redPacketMoney) > 0 &&
                    <View className="particulars-detail-item">
                        <View className="particulars-detail-item-title">
                            <View>红包</View>
                            <View className="color1">-{formatMoney(fareBreakdown?.redPacketMoney)}元</View>
                        </View>
                    </View>
                }
                {Number(fareBreakdown?.couponMoney) > 0 &&
                    <View className="particulars-detail-item">
                        <View className="particulars-detail-item-title">
                            <View>优惠券</View>
                            <View className="color1">-{formatMoney(fareBreakdown?.couponMoney)}元</View>
                        </View>
                    </View>
                }
            </View>
            <View className="car-card-end-cost">
                <View className="car-card-end-cost-money">
                    全程{formatTripDistance(fareBreakdown?.kilometer)}｜{formatTripDurationFromSeconds(fareBreakdown?.time)}
                </View>
                <View onClick={toMoneyDetail} className="car-card-end-cost-view">
                    <View>费用说明</View>
                    <Image src={require('../../../../assets/ccc-icon-right.png')} />
                </View>
            </View>
            {
                tripStatus === 8 &&
                <View onClick={handlePay} className="car-card-end-pay">立即支付</View>
            }
        </View>
    );
}
