
/**
 * Project iLinkWorld
 * File CarteLierN
 * Path screens/wallet/user
 * Created by BRICE ZELE
 * Date: 08/11/2021
 */
import React, {useEffect, useState, useRef} from 'react';
import {
    Alert,
    Dimensions,
    KeyboardAvoidingView,
    Platform,
    ScrollView,
    StyleSheet,
    TouchableOpacity,
    View,
} from 'react-native';
import {connect, useDispatch} from 'react-redux';
import {useFormik} from 'formik';
import * as Yup from 'yup';
import * as Utils from '../../../utils/UtilsFunction'
import { optionenvoieautrewalletNanoSanteScreen} from '../../../utils/UtilsFunction'
import {Color} from "../../../config/Color";
import I18n from 'react-native-i18n';
import {Fumi} from 'react-native-textinput-effects';
import {ScreenComponent} from "../../../components/ScreenComponent";
import PasswordInput from '../../../components/PasswordInput';
import Button from "../../../components/Button";
import FontAwesome from "react-native-vector-icons/FontAwesome";
import {
    fetchActivePaySubscription,
    fetchActivePaySubscriptionReset,
    fetchGetSubscriptionList,
    fetchGetSubscriptionListReset
} from "../../../redux/insurance/insurance.actions";
import DropdownAlert from "react-native-dropdownalert";
import {readUser} from "../../../webservice/AuthApi";
import * as Animatable from 'react-native-animatable';
import FontAwesomeIcon from 'react-native-vector-icons/FontAwesome';
import {createStructuredSelector} from "reselect";
import {selectActivatePaySubscription, selectSubscriptionList} from "../../../redux/insurance/insurance.selector";
import {responsiveHeight, responsiveWidth} from 'react-native-responsive-dimensions';
import {Dropdown} from "react-native-material-dropdown-v2";
import {store} from "../../../redux/store";
import Text from "../../../components/Text";
import TextInput from "../../../components/TextInput";
import route from '../../../route.json';
let moment = require('moment-timezone');

const {width, height} = Dimensions.get('window');
const CIRCLE_SIZE = width * 0.5;

const navigatorStyle = {
    navBarBackgroundColor: Color.primaryColor,
    statusBarColor: Color.primaryDarkColor,
    navBarTextColor: '#FFFFFF',
    navBarButtonColor: '#FFFFFF'

};

const navigationOptions = () => {
    return {
         drawerLabel: () => null,
         headerTitle: I18n.t('PAIEMENT_FACTURE'),
         headerTintColor: 'white',
         headerStyle: {
              backgroundColor: Color.primaryColor,
              marginTop: 0,
              color: 'white'
         },
         headerTitleStyle: {
              color: "white"
         },
         title: I18n.t('PAIEMENT_FACTURE')
    }
};


const CarteLierN = ({
                                           activatePaySubscription,
                                           fetchGetSubscriptionList,
                                           subscriptionList,
                                           fetchActivePaySubscription,
                                           navigation,
                                       }) => {

    const [user, setUser] = useState(null);
    const [password, setPassword] = useState(null);
    const [subscriptions, setSubscriptions] = useState([]);
    const [subscription, setSubscription] = useState(null);
 

 
    const dispatch = useDispatch();
    
    let dropDownAlertRef: any = null;
    let subscriptionRef = null;
    let amountPerMonthRef = null;
    const [wallet] = useState(store.getState().walletDetailReducer.result.response);
    const with_linked_card = true;
    useEffect(() => {
        readUser().then((user) => {
            setUser(user)
        });
        dispatch(fetchGetSubscriptionListReset());
        dispatch(fetchActivePaySubscriptionReset());
    }, []);

    useEffect(() => {
        if (user !== null) {
            console.log("user", user.id);
            fetchGetSubscriptionList(user.id, 'UNPAID', true);
        }
    }, [user]);

    useEffect(() => {
        if (subscriptionList.result !== null) {
            let subscriptionListTemp = [];
            subscriptionList.result.response.map((subscriptionItem, index) => {
                subscriptionListTemp.push(subscriptionItem);
            });
            setSubscriptions(subscriptionListTemp);
        }

        if (subscriptionList.error) {
            Alert.alert(
                I18n.t("ERROR_LABLE"),
                Utils.getErrorMsg(subscriptionList),
                [
                    {
                        text: I18n.t("OK"), onPress: () => {
                            dispatch(fetchGetSubscriptionListReset());
                        }
                    }
                ],
                {cancelable: false}
            );
            /*            dropDownAlertRef.alertWithType(
                            'error',
                            I18n.t('ERROR_LABEL'),
                            Utils.getErrorMsg(subscriptionList),
                        );
                        dispatch(fetchGetSubscriptionListReset());*/
        }
    }, [subscriptionList]);

    useEffect(() => {
        
        if (activatePaySubscription.result !== null) {
            console.log("activatePaySubscription", activatePaySubscription);
            if (activatePaySubscription.result.status === 301) {               
                navigation.push('webviewScreen', {
                            url: activatePaySubscription.result.response.payment_url,
                            requestBody: { password: values.password, amount: values.amount, cvv: values.cvv, with_linked_card: true, payment_method: 'CARD'},
                            transactionType: "USER_PAY_INSURANCE",
                            subscription: subscription
                            
                            });                
                     } 
                   

            if (activatePaySubscription.result.status === 200) {
                console.warn("log: ",activatePaySubscription.result.status )
                        Alert.alert(
                            I18n.t("SUCCESS"),
                            activatePaySubscription.result.response,
                            [
                                {
                                    text: I18n.t("OK"), onPress: () => {
                                        dispatch(fetchActivePaySubscriptionReset());
                                       // navigation.pop()
                                    }
                                }
                            ],
                            {cancelable: false}
                        );
                    
                
            }
        }
      
        if (activatePaySubscription.error) {
            console.log('reponse: ', Utils.getErrorMsg(activatePaySubscription),)
            Alert.alert(
                I18n.t("ERROR_LABLE"),
                Utils.getErrorMsg(activatePaySubscription),
                [
                    {
                        text: I18n.t("OK"), onPress: () => {
                            dispatch(fetchActivePaySubscriptionReset());
                            //navigation.goBack()
                        }
                    }
                ],
                {cancelable: false}
            );
            /*            dropDownAlertRef.alertWithType(
                            'error',
                            I18n.t('ERROR_LABEL'),
                            Utils.getErrorMsg(activatePaySubscription),
                        );
                        dispatch(fetchActivePaySubscriptionReset());*/
        }
 }, [activatePaySubscription]);

    const RegisterSchema = Yup.object().shape({
        password: Yup.string().required(I18n.t('THIS_FIELD_IS_REQUIRED')),
        amount: Yup.number().required(I18n.t('THIS_FIELD_IS_REQUIRED')),
        cvv: Yup.number().required(I18n.t('THIS_FIELD_IS_REQUIRED')),
    });


    const {
        handleChange,
        handleBlur,
        values,
        errors,
        touched,
        setFieldValue,
        isValid,
    } = useFormik({
        validationSchema: RegisterSchema,
        initialValues: {
            cvv: '',
            password: '',
            amount: '',
           
        },
        onSubmit: values => {
            if (user !== null) {
                if (subscription === null) {
                    subscriptionRef.shake(800);
                } else {
                    console.log("subscription", subscription);
                }
            }
        }
    });

    return (
        <ScreenComponent>
            <DropdownAlert ref={ref => (dropDownAlertRef = ref)}/>
            <KeyboardAvoidingView
                behavior={Platform.OS === 'android' ? 'height' : 'padding'}
                style={{flex: 1}}>

                <ScrollView style={styles.container}>
                <Text style={styles.subbigtitle}>{I18n.t('PAIEMENT_FACTURE_CARD_LIER')}</Text>
                            <View style={styles.contain}>
                         
                                <Animatable.View ref={(comp) => {
                                    subscriptionRef = comp
                                }}
                                                 style={{
                                                     width: responsiveWidth(90),
                                                     height: 60,
                                                     alignSelf: 'center',
                                                     borderRadius: 10,
                                                     paddingLeft: 20,
                                                     paddingRight: 20,
                                                     backgroundColor: 'white'
                                                 }}>
                                    <Dropdown
                                        label={I18n.t('SELECT_INSURANCE')}
                                        data={subscriptions}
                                        useNativeDriver={true}
                                        onChangeText={(value, index, data) => {
                                            console.log("Value", value);
                                            setSubscription(
                                                {
                                                    id: value.id,
                                                    insurance_subscription_id: value.insurance_subscription_id,
                                                    network_id: value.network_id,
                                                    user_id: value.user_id,
                                                    number_of_months: value.number_of_months,
                                                    bonus_amount: value.bonus_amount,
                                                    number_of_beneficiaries: value.number_of_beneficiaries,
                                                    total_bonus_amount: value.total_bonus_amount,
                                                    state: value.state,
                                                    created_at: value.created_at,
                                                    updated_at: value.updated_at,
                                                    start_at: value.start_at,
                                                    end_at: value.end_at,
                                                    reason: value.reason,
                                                    network: value.network,
                                                    beneficiaries: value.beneficiaries
                                                }
                                            );
                                        }}
                                        valueExtractor={(value) => {
                                            return value
                                        }}
                                        labelExtractor={(value) => {
                                            return `${I18n.t('MNT')}: ${value.amount} | ${I18n.t('FACT')}: ${value.invoice_id.slice(0, 7)} | ${I18n.t('RESTE')}: ${value.remaining_amount}`
                                        }}
                                    />
                                </Animatable.View>

                                <TextInput
                                    style={{marginTop: 10}}
                                    placeholder={I18n.t('CARD_CVC_LABEL')}
                                    value={values.cvv}
                                    keyboardType='numeric'
                                    onChangeText={(text) => {
                                        setFieldValue('cvv', text);
                                    }}
                                    onBlur={handleBlur('cvv')}
                                    success={touched.cvv && !errors.cvv}
                                    touched={touched.cvv}
                                    error={errors.cvv}
                                />

                                <TextInput
                                    style={{marginTop: 10}}
                                    placeholder={I18n.t('AMOUNT')}
                                    value={values.amount}
                                    keyboardType='numeric'
                                    onChangeText={(text) => {
                                        setFieldValue('amount', text);
                                    }}
                                    onBlur={handleBlur('amount')}
                                    success={touched.amount && !errors.amount}
                                    touched={touched.amount}
                                    error={errors.amount}
                                />

                                <PasswordInput
                                    style={{marginTop: 10}}
                                    onChangeText={handleChange('password')}
                                    placeholder={I18n.t('PASSWORD')}
                                    secureTextEntry
                                    icon={<FontAwesome name="lock" size={20}/>}
                                    value={values.password}
                                    onBlur={handleBlur('password')}
                                    success={touched.password && !errors.password}
                                    touched={touched.password}
                                    error={errors.password}
                                />
                      
                                <Button
                                     style={styles.btnvalide}
                                     textStyle={styles.textbtnvalide}
                                    full
                                    loading={activatePaySubscription.loading}
                                    
                                    onPress={() => {
                                        fetchActivePaySubscription(subscription.id, { password: values.password, amount: values.amount, cvv: values.cvv, with_linked_card: true, payment_method: 'CARD'});
                                    }}
                                    >
                                    {I18n.t('SUBMIT_LABEL')}
                                </Button>
                            </View>
                    {/* {modalPaymentModal && renderPaymentMethodModal()} */}

                </ScrollView>
            </KeyboardAvoidingView>
        </ScreenComponent>
    );
};


const mapStateToProps = createStructuredSelector({
    subscriptionList: selectSubscriptionList,
    activatePaySubscription: selectActivatePaySubscription,


});

export default connect(mapStateToProps, {
    fetchActivePaySubscription,
    fetchGetSubscriptionList,
})(
    CarteLierN,
);
const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: Color.primaryDarkColor,
   },
   btnvalide: {
    marginTop: 20,
    marginLeft: 20,
    marginRight: 20,
    borderColor: 'transparent',
    backgroundColor: Color.accentLightColor,
    height: 52
},
subbigtitle: {
    color: 'white',
    fontSize: 17,
    textAlign: 'center',
    margin: 5,
},
textbtnvalide: {
color: 'white',
fontWeight: 'bold'
},
      dropdownContainer: {
        borderWidth: 1,
        borderRadius: 4,
        paddingHorizontal: 10,
      },
    textInput: {
        height: 46,
        backgroundColor: Color.fieldColor,
        borderRadius: 5,
        marginTop: 10,
        padding: 10,
        width: '100%',
    },
    lineRow: {
        flexDirection: 'row',
        justifyContent: 'space-between',
        paddingBottom: 20,
    },
    contain: {
        alignItems: 'center',
        marginTop: 40,
        paddingBottom: 20,
        paddingLeft: 20,
        paddingRight: 20,
        flex: 1,
    },
    circle: {
        width: CIRCLE_SIZE,
        height: CIRCLE_SIZE,
        borderRadius: CIRCLE_SIZE / 2,
        position: 'absolute',
        top: '15%',
    },
    circleContainer: {
        alignItems: 'flex-end',
        right: -(CIRCLE_SIZE / 3),
        top: -(CIRCLE_SIZE / 1.5),
    },
    lineSeparator: {
        borderWidth: 1,
        width: '40%',
        height: 1,
        alignSelf: 'center',
    },
    line: {
        width: 1,
        height: 14,
        backgroundColor: Color.grayColor,
        marginLeft: 10,
    },
    contentModeView: {
        width: 30,
        height: '100%',
        alignItems: 'flex-end',
        justifyContent: 'center',
    },
    contentFilter: {
        flexDirection: 'row',
        alignItems: 'center',
        marginLeft: 10,
    },
    bottomModal: {
        justifyContent: 'flex-end',
        margin: 0,
    },
    contentFilterBottom: {
        width: "100%",
        borderTopLeftRadius: 8,
        borderTopRightRadius: 8,
        paddingHorizontal: 20
    },
    contentSwipeDown: {
        paddingTop: 10,
        alignItems: 'center',
    },
    lineSwipeDown: {
        width: 30,
        height: 2.5,
        backgroundColor: Color.dividerColor,
    },
    contentActionModalBottom: {
        flexDirection: 'row',
        paddingVertical: 15,
        justifyContent: 'space-between',
        borderBottomWidth: 1,
    },
    containModal: {
        paddingVertical: 10,
        paddingHorizontal: 20,
        flexDirection: 'row',
        justifyContent: 'space-between',
    },
    floatingButtonAdd: {
        backgroundColor: Color.accentColor,
        position: "absolute",
        width: 25,
        bottom: 0,
        zIndex: 1000,
        right: 20,
        top: 35,
        height: 25,
        borderRadius: 12.5,
        alignItems: 'center',
        justifyContent: 'center',
    },
    contentSwitch: {
        width: responsiveWidth(40),
    },
    switch: {},
    choosePhotoBtn: {
        marginTop: 10,
        marginBottom: 10,
        width: "auto",
        height: "auto",
        padding: 5,
        alignItems: 'center',
        borderColor: Color.borderColor,
        marginRight: 10,
        elevation: 2,
    },
    checkbox: {
        alignSelf: "center",
        color: "white"
    },
    itemAmountPerMonth: {
        paddingLeft: 10,
        marginTop: 10,
        flexDirection: 'row',
    },
    dot: {
        width: 12,
        height: 12,
        borderRadius: 6
    },
    blockView: {
        paddingVertical: 10,
        borderBottomWidth: 0.5,
    },
    containPaymentMethod: {
        flex: 1,
        alignItems: 'center',
        paddingHorizontal: 20,
        paddingVertical: 15,
    },
    methodItem: {
        width: '100%',
        flexDirection: 'row',
        justifyContent: 'space-between',
        alignItems: 'center',
        paddingVertical: 15,
        marginBottom: 5,
    },
    iconContent: {
        width: 30,
        marginRight: 10,
        alignItems: 'center',
    },
    input: {
        height: 60,
        marginTop: responsiveHeight(2),
        marginLeft: responsiveWidth(5),
        marginRight: responsiveWidth(5),
        borderRadius: 5,
    }
});
