<?php
require_once( $_SERVER['DOCUMENT_ROOT'] .'/wp-load.php' );

$action = htmlspecialchars($_POST['action']);

$return = false;
switch($action)
{
    //-----ACTION - VALIDATE AGENCY CODE--------------------------------------------------------------------------------

    case 'validate_agency_code':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $vendor_id = get_es_entry_id( $vendor_id );

        $coupon = htmlspecialchars( $_POST['code'] );

        $post = get_post( $page_id );

        if( $post->post_type == 'vendor' )
        {

            $vendor_code = get_field( 'data_code', $post->ID );

            if( $vendor_code == $coupon )
            {
                echo 'validated';
                $_SESSION['vendor_validations'][$post->ID] = true;

//                echo session_id();
//                dump($_SESSION['vendor_validations']);

            }else{
                echo 'not correct';

                $_SESSION['vendor_validations'][$post->ID] = false;

//                dump($_SESSION['vendor_validations']);
            }

        }


        break;

    //-----END ACTION - VALIDATE AGENCY CODE----------------------------------------------------------------------------
    //-----ACTION - VALIDATE AGENCY COUPON------------------------------------------------------------------------------

    case 'validate_agency_coupon':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $coupon_code = htmlspecialchars( $_POST['coupon'] );

        $vendor = get_post( $page_id );

        if( $vendor->post_type == 'vendor' )
        {
            global $wpdb;
            $coupon = $wpdb->get_row('SELECT * FROM wp_posts WHERE post_type="vendor_coupon" AND post_title="'. $coupon_code .'"');

            if( $coupon_code == $coupon->post_title )
            {

                $discount_applied_to = get_field( 'discount_applied_to', $coupon->ID );

                $access_validated = false;
                if( $discount_applied_to )
                {

                    foreach ( $discount_applied_to AS $vendor_validation_id )
                    {
                        if( $vendor->ID == $vendor_validation_id )
                        {
                            $access_validated = true;
                        }
                    }

                }else{
                    $access_validated = true;
                }

                if( $access_validated )
                {

                    echo 'validated';

                    $vendor_coupons = $_SESSION['vendor_coupons'][$vendor->ID];

                    if( ! is_array( $vendor_coupons ) )
                    {
                        $vendor_coupons = array();
                    }

                    $found = false;
                    foreach ( $vendor_coupons AS $vendor_coupon )
                    {
                        if( $coupon->ID == $vendor_coupon )
                        {
                            $found = true;
                        }
                    }

                    if (! $found) {
                        $vendor_coupons[] = $coupon->ID;
                    }

                    $_SESSION['vendor_coupons'][$vendor->ID] = $vendor_coupons;




                }else{
                    echo 'not_allowed';
                }

            }else{
                echo 'not_valid';

            }

        }


        break;

    //-----END ACTION - VALIDATE AGENCY COUPON--------------------------------------------------------------------------
    //-----ACTION - REMOVE AGENCY COUPON--------------------------------------------------------------------------------

    case 'remove_agency_coupon':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $coupon_id_to_remove = htmlspecialchars( $_POST['coupon'] );

        $vendor = get_post( $page_id );

        if( $vendor->post_type == 'vendor' )
        {
            $coupons = $_SESSION['vendor_coupons'][$vendor->ID];

            if( is_array($coupons) )
            {
                $new_coupons = array();
                foreach ( $coupons AS $coupon_id )
                {
                    if ($coupon_id != $coupon_id_to_remove) {
                        $new_coupons[] = $coupon_id;
                    }
                }

                $_SESSION['vendor_coupons'][$vendor->ID] = $new_coupons;
            }

        }

        break;

    //-----END ACTION - REMOVE AGENCY COUPON----------------------------------------------------------------------------
    //-----ACTION - DISABLE DENTAL INSURANCE----------------------------------------------------------------------------

    case 'disable_dental_insurance':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $insurer = htmlspecialchars( $_POST['insurer_by_user'] );

        $vendor = get_post( $page_id );

        if( $vendor->post_type == 'vendor' )
        {

            if( ! $insurer || ($insurer === '' || $insurer === '0') )
            {
                $insurer = get_field( 'insurers_selection', $page_id );
            }

            $_SESSION['form_fields'][ $page_id ]['dental_insurance_for_' . $insurer] = 'disabled';


        }

        break;

    //-----END ACTION - DISABLE DENTAL INSURANCE------------------------------------------------------------------------
    //-----ACTION - ENABLE DENTAL INSURANCE-----------------------------------------------------------------------------

    case 'enable_dental_insurance':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $insurer = htmlspecialchars( $_POST['insurer_by_user'] );

        $vendor = get_post( $page_id );

        if( $vendor->post_type == 'vendor' )
        {

            if( ! $insurer || ($insurer === '' || $insurer === '0') )
            {
                $insurer = get_field( 'insurers_selection', $page_id );
            }

            $_SESSION['form_fields'][ $page_id ]['dental_insurance_for_' . $insurer] = 'enabled';


        }

        break;

    //-----END ACTION - ENABLE DENTAL INSURANCE-------------------------------------------------------------------------

    //-----ACTION - DISABLE SPORTS EXPANSION----------------------------------------------------------------------------
    case 'disable_sports':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $insurer = htmlspecialchars( $_POST['insurer_by_user'] );

        $vendor = get_post( $page_id );

        if ($vendor->post_type !== 'vendor') {
            return;
        }

        if ($insurer === '' || $insurer === '0') {
            $insurer = get_field('insurers_selection', $page_id);
        }

        $_SESSION['form_fields'][$page_id]['sports_for_' . $insurer] = 'disabled';

        break;
    //-----END ACTION - DISABLE SPORTS EXPANSION------------------------------------------------------------------------

    //-----ACTION - ENABLE SPORTS EXPANSION-----------------------------------------------------------------------------
    case 'enable_sports':
        $page_id = get_es_entry_id((int)htmlspecialchars($_POST['page_id']));
        
        $vendor = get_post($page_id);
        
        if ($vendor->post_type !== 'vendor') {
            return;
        }
        
        $insurer = htmlspecialchars($_POST['insurer_by_user']) ?: get_field('insurers_selection', $page_id);

        $_SESSION['form_fields'][$page_id]['sports_for_' . $insurer] = 'enabled';

        break;
    //-----END ACTION - ENABLE SPORTS EXPANSION-------------------------------------------------------------------------
    
    //-----ACTION - FILL FORM FIELD DATA--------------------------------------------------------------------------------

    case 'fill_form_fields_data':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $post = get_post( $page_id );

        if( $post->post_type == 'vendor' && isset($_SESSION['form_fields'][htmlspecialchars( $post->ID )]) )
        {
            $form_fields_json = json_encode( $_SESSION['form_fields'][htmlspecialchars( $post->ID )] );
            echo $form_fields_json;
        }


        break;

    //-----END ACTION - FILL FORM FIELD DATA----------------------------------------------------------------------------
    //-----ACTION - SAVE FORM FIELD DATA--------------------------------------------------------------------------------

    case 'save_form_field_data':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $field_name = htmlspecialchars( $field_name );
        $selected_value = htmlspecialchars( $_POST['selected_value'] );

        $post = get_post( $page_id );

        if( $post->post_type == 'vendor' )
        {
            $_SESSION['form_fields'][$post->ID][$field_name] = $selected_value;
        }

    break;

    //-----END ACTION - SAVE FORM FIELD DATA----------------------------------------------------------------------------
    //-----ACTION - SAVE FORM FIELDS DATA-------------------------------------------------------------------------------

    case 'save_form_fields_data':

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $fields = $_POST['fields'];

        $post = get_post( $page_id );

        if( $post->post_type == 'vendor' )
        {

            foreach ($fields AS $key => $value )
            {
                $_SESSION['form_fields'][htmlspecialchars( $post->ID )][htmlspecialchars( $key ) ] = $value;
            }

        }

    break;

    //-----END ACTION - SAVE FORM FIELDS DATA---------------------------------------------------------------------------
    //-----ACTION - GET FORM FIELD DATA---------------------------------------------------------------------------------

    // not used
    case 'get_form_field_data':

        $return_value = '';

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $field_name = htmlspecialchars( $_POST['field_name'] );

        switch( $field_name )
        {
            case 'recipient_first_name':
                $first_name = $_SESSION['form_fields'][$page_id]['billing_first_name'];
                $last_name = $_SESSION['form_fields'][$page_id]['billing_last_name'];

                $return_value = $first_name .' '. $last_name;

                break;

            case 'billing_state':

                $country_states_array = WC()->countries->get_states();
                $state = $_SESSION['form_fields'][$page_id][$field_name];

                $return_value = $country_states_array['ES'][$state] ? html_entity_decode( $country_states_array['ES'][$state] ) : $state;

                break;

            default:
                $return_value = $_SESSION['form_fields'][$page_id][$field_name];
                break;
        }

        echo $return_value;

        break;

    //-----END ACTION - GET FORM FIELD DATA-----------------------------------------------------------------------------
    //-----ACTION - GET FORM FIELDS DATA--------------------------------------------------------------------------------

    case 'get_form_fields_data':

        $return_value = '';

        $page_id = (int) htmlspecialchars( $_POST['page_id'] );
        $page_id = get_es_entry_id( $page_id );

        $fields = $_POST['fields'];

        $fields_final = array();

        foreach( $fields AS $field_string )
        {
            $field = explode('____', $field_string);
            $field_esig = $field[0];
            $field_name = $field[1];

            switch( $field_name )
            {
                case 'recipient_first_name':
                    $first_name = $_SESSION['form_fields'][$page_id]['billing_first_name'];
                    $last_name = $_SESSION['form_fields'][$page_id]['billing_last_name'];

                    $return_value = $first_name .' '. $last_name;

                    break;

                case 'billing_state':

                    $country_states_array = WC()->countries->get_states();
                    $state = $_SESSION['form_fields'][$page_id][$field_name];

                    $return_value = $country_states_array['ES'][$state] ? html_entity_decode( $country_states_array['ES'][$state] ) : $state;

                    break;

                default:
                    $return_value = $_SESSION['form_fields'][$page_id][$field_name];
                    break;
            }

            $fields_final[] = $field_esig .'____'. $field_name .'____'. $return_value;


        }

        echo json_encode($fields_final);

        break;

    //-----END ACTION - GET FORM FIELDS DATA----------------------------------------------------------------------------
    //-----ACTION - SAVE SIGNED DOCUMENT ID AND RETURN CALLBACK---------------------------------------------------------

    case 'save_signed_document_id_and_return_callback':
        $vendor_id = (int) htmlspecialchars( $_POST['vendor_id'] );

        $target_lang = htmlspecialchars( $_POST['target_lang'] );
        if( ! $target_lang || ($target_lang === '' || $target_lang === '0') )
        {
            $target_lang = 'es';
        }

        $vendor_id = get_es_entry_id( $vendor_id );

        $document_id = (int) htmlspecialchars( $_POST['document_id'] );
        $template_page_id = (int) htmlspecialchars( $_POST['template_page_id'] );

        $signature = array(
            'vendor_id' => $vendor_id,
            'document_id' => $document_id,
            'template_page_id' => $template_page_id,
        );

        $_SESSION['customer_signed_documents'][] = $signature;

        $permalink = get_permalink( $vendor_id );

        if ( function_exists('icl_object_id') )
        {
            $permalink = apply_filters( 'wpml_permalink', $permalink, $target_lang );
        }

        echo $permalink;
        break;

    //-----END ACTION - SAVE SIGNED DOCUMENT ID AND RETURN CALLBACK-----------------------------------------------------
    //-----ACTION - CLEAR ALL SIGNED DOCUMENTS--------------------------------------------------------------------------

    case 'clear_all_signed_documents':
        $_SESSION['customer_signed_documents'] = array();

        break;

    //-----END ACTION - CLEAR ALL SIGNED DOCUMENTS----------------------------------------------------------------------
    //-----ACTION - REGISTER ORDER--------------------------------------------------------------------------------------

    case 'register_order':

        register_order();

        break;

    //-----END ACTION - REGISTER ORDER----------------------------------------------------------------------------------
    //-----ACTION - REGISTER MULTIPLE ORDERS----------------------------------------------------------------------------

    case 'register_multiple_orders':

        $ids = htmlspecialchars( $_POST['ids'] );
        $agency_id = htmlspecialchars( $_POST['agency_id'] );

        register_multiple_order( $ids, $agency_id );

        break;

    //-----END ACTION - REGISTER MULTIPLE ORDERS------------------------------------------------------------------------
    //-----ACTION - REGISTER AGENCY ORDERS------------------------------------------------------------------------------

    case 'register_agency_orders':

        $agency_id = (int) htmlspecialchars( $_POST['agency'] );

        $session_sheets_data = $_SESSION['temp']['import_tables'][$agency_id];

        $agency_id_origin = get_es_entry_id( $agency_id );

        if( ! empty( $agency_id_origin ) )
        {
            $agency_id = $agency_id_origin;
        }

        global $wpdb;
        $vendors = $wpdb->get_results('SELECT * FROM wp_postmeta WHERE meta_key = "data_ownership" AND meta_value = '. $agency_id);

        $one_vendor_id = false;
        foreach ( $vendors AS $vendor )
        {
            $vendor = get_post( $vendor->post_id );
            if( $vendor->post_type == 'vendor' && $vendor->post_type != 'inherit' )
            {
                $one_vendor_id = $vendor->ID;
            }
        }

        // Vendor data
        $vendor_id = $one_vendor_id;
        $vendor_id = get_es_entry_id( $vendor_id );

        if( $session_sheets_data )
        {
            foreach ( $session_sheets_data AS $session_sheet_data )
            {
                $table_array = unserialize( base64_decode( $session_sheet_data[0] ) );

                $counter = 0;
                foreach ( $table_array AS $table_data )
                {
                    if( $counter > 0 ) // 0 is header row
                    {
                        // Reorder and Reassign values
                        $new_order_data = array();
                        $new_order_data['behavior'] = 'order_by_agency';
                        $new_order_data['vendor_id'] = $vendor_id;
                        $new_order_data['dni_type'] = $table_data[0];
                        $new_order_data['dni'] = $table_data[1];
                        $new_order_data['first_name'] = $table_data[2];
                        $new_order_data['last_name'] = $table_data[3];
                        $new_order_data['gender'] = $table_data[4];
                        $new_order_data['birthdate'] = $table_data[5];
                        $new_order_data['dental_insurance'] = $table_data[6];
                        $new_order_data['init_date'] = $table_data[7];
                        $new_order_data['end_date'] = $table_data[8];
                        $new_order_data['insurance'] = $table_data[9];

                        $result = register_order( $new_order_data );
                    }
                    
                    $counter++;
                }

            }

            unset( $_SESSION['temp']['import_tables'][$agency_id] );
            wp_redirect( get_permalink( $agency_id ) );
        }

        break;

    //-----END ACTION - REGISTER AGENCY ORDERS--------------------------------------------------------------------------
    //-----ACTION - GET VENDOR PRODUCT PRICE TEMPLATE-------------------------------------------------------------------

    case 'get_vendor_product_price_template':

        // Vendor data
        $vendor_id = (int) htmlspecialchars( $_POST['vendor'] );
        $vendor_id = get_es_entry_id( $vendor_id );

        $vendor = get_post( $vendor_id );
        $vendor_title = $vendor->post_title;
        $vendor_code = get_field( 'data_code', $vendor_id );

        $customer_age = (int) htmlspecialchars( $_POST['customer_age'] );
        $months_to_contract = (int) htmlspecialchars( $_POST['months_to_contract'] ?? 0 );

        $birthdate = htmlspecialchars( $_POST['birthdate'] );
        $init_date = htmlspecialchars( $_POST['init_date'] );
        $end_date = htmlspecialchars( $_POST['end_date'] );
        $insurer_selected_by_user = htmlspecialchars( $_POST['insurer_by_user'] );

        // Insurer
        $insurers_selection = get_field( 'insurers_selection', $vendor_id );

        $selected_insurer = $insurers_selection;
        if( $insurer_selected_by_user && ($insurer_selected_by_user !== '' && $insurer_selected_by_user !== '0') )
        {
            $selected_insurer = $insurer_selected_by_user;
        }

        // Test if access to vendor page is validated
        if( ! customer_access_to_vendor_is_validated( $vendor_id ) )
        {
            die('Acceso a la página del vendedor no está validado');
        }
        
        // Calculation prices
        $price_data = array(
            'months_to_contract' => $months_to_contract,
            'customer_age' => $customer_age,
            'init_date' => $init_date,
            'end_date' => $end_date,
        );
        $prices = get_prices_data( $vendor_id, $selected_insurer, $price_data );

        //dump($prices);
        echo $prices['output'];

        break;

    //-----END ACTION - GET VENDOR PRODUCT PRICE TEMPLATE---------------------------------------------------------------
    //-----ACTION - GET VENDOR INSURER DOCUMENTS------------------------------------------------------------------------

    case 'get_vendor_insurer_documents':

        $vendor_id = (int) htmlspecialchars( $_POST['vendor'] );
        $currentLang = htmlspecialchars( $_POST['currentLang'] );
        $vendor_id = get_es_entry_id( $vendor_id );

        $insurer_by_user = htmlspecialchars( $_POST['insurer_by_user'] );
        $vendor = get_post( $vendor_id );
        $vendor_title = $vendor->post_title;

        paint_documents_for_signing( $vendor_id, $insurer_by_user, $currentLang );

        break;

    //-----END ACTION - GET VENDOR INSURER DOCUMENTS--------------------------------------------------------------------
    //-----ACTION - GET VENDOR PASSPORT FILE INTERFACE------------------------------------------------------------------

    case 'get_vendor_passport_file_interface':

        $vendor_id = (int) htmlspecialchars( $_POST['vendor'] );
        $vendor_id = get_es_entry_id( $vendor_id );

        $insurer_by_user = htmlspecialchars( $_POST['insurer_by_user'] );

        paint_vendor_passport_file_interface( $vendor_id, $insurer_by_user );

        break;

    //-----END ACTION - GET VENDOR PASSPORT FILE INTERFACE--------------------------------------------------------------
    //-----ACTION - GET VENDOR PASSPORT FILE INTERFACE------------------------------------------------------------------

    case 'get_vendor_study_verification_file_interface':

        $vendor_id = (int) htmlspecialchars( $_POST['vendor'] );
        $vendor_id = get_es_entry_id( $vendor_id );

        $insurer_by_user = htmlspecialchars( $_POST['insurer_by_user'] );

        paint_vendor_study_verification_file_interface( $vendor_id, $insurer_by_user );

        break;

    //-----END ACTION - GET VENDOR PASSPORT FILE INTERFACE--------------------------------------------------------------
    //-----ACTION - UPLOAD VENDOR PASSPORT FILE-------------------------------------------------------------------------

    case 'upload_order_passport_file':

        $order_id = (int) htmlspecialchars( $_POST['order_id'] );
        $agency_id = (int) htmlspecialchars( $_POST['agency_id'] );

        $morder = new Order( $order_id );

        $filepath = $_FILES['passport_file']['tmp_name'];
        $type = $_FILES['passport_file']['type'];

        $data = file_get_contents($filepath);
        $base64 = 'data:' . $type . ';base64,' . base64_encode($data);

        update_post_meta($order_id, '_billing_passport_file', $base64);

        $agency_url = get_permalink($agency_id);

        // Change Order status if is bacs and passport file is uploaded
        if( $morder->get('payment_method') == 'bacs' && $morder->get('status') == 'pending' )
        {
            $morder->complete_order();

        }

        header( 'Location:'. $agency_url );

        break;

    //-----END ACTION - UPLOAD VENDOR PASSPORT FILE---------------------------------------------------------------------
    //-----ACTION - UPLOAD STUDY VERIFICATION PASSPORT FILE-------------------------------------------------------------

    case 'upload_order_study_verification_file':

        $order_id = (int) htmlspecialchars( $_POST['order_id'] );
        $agency_id = (int) htmlspecialchars( $_POST['agency_id'] );

        $morder = new Order( $order_id );

        $filepath = $_FILES['study_verification_file']['tmp_name'];
        $type = $_FILES['study_verification_file']['type'];

        $data = file_get_contents($filepath);
        $base64 = 'data:' . $type . ';base64,' . base64_encode($data);

        update_post_meta($order_id, '_billing_study_verification_file', $base64);

        $agency_url = get_permalink($agency_id);

        // Change Order status if is bacs and study_verification file is uploaded
        if( $morder->get('payment_method') == 'bacs' && $morder->get('status') == 'pending' )
        {
            $morder->complete_order();

        }

        header( 'Location:'. $agency_url );

        break;

    //-----END ACTION - UPLOAD STUDY VERIFICATION PASSPORT FILE---------------------------------------------------------
    //-----ACTION - ACCESS AGENCY INTERFACE VALIDATION------------------------------------------------------------------

    case 'agency_page_access_validation':

        $validated = false;
        $error_msg = false;

        $agency_id = (int) htmlspecialchars( $_POST['agency'] );
        $return_id = (int) htmlspecialchars( $_POST['return_id'] );
        $loginmail = htmlspecialchars( $_POST['user'] );
        $password = htmlspecialchars( $_POST['password'] );

        $usersmax = 3;
        for( $x = 1; $x <= $usersmax; $x++ )
        {
            $access_data = get_field( 'users_user_'. $x, $agency_id );

            if ($access_data && ($loginmail == $access_data['loginmail'] && $password == $access_data['password'])) {
                $validated = true;
                break;
            }

        }

        if( $validated )
        {
            $_SESSION['agency_validations'][$agency_id] = true;

        }else{
            $_SESSION['agency_validations'][$agency_id] = false;
            $error_msg = __( 'Access denied', 'maldontheme');
        }

        $return_permalink = get_permalink( $return_id );

        if( $validated )
        {
            header('Location: '. $return_permalink .'');
        }else{
            header('Location: '. $return_permalink .'?error_msg='. $error_msg);
        }

        break;

    //-----END ACTION - ACCESS AGENCY INTERFACE VALIDATION--------------------------------------------------------------
    //-----ACTION - AGENCY PAGE CHANGE USER PASSWORD--------------------------------------------------------------------

    case 'agency_page_change_user_password':

        $validated = true;
        $error_msg = false;

        $agency_id = (int) htmlspecialchars( $_POST['agency'] );
        $agency_user = htmlspecialchars( $_POST['user'] );
        $password = htmlspecialchars( $_POST['password'] );
        $password_confirmation = htmlspecialchars( $_POST['password_confirmation'] );
        $parameters = htmlspecialchars( $_POST['agency_parameters'] );

        $usersmax = 5;
        for( $x = 1; $x <= $usersmax; $x++ )
        {
            $access_data = get_field( 'users_user_'. $x, $agency_id );

            if ($access_data && $agency_user == $access_data['loginmail']) {
                if( $password === $password_confirmation )
                {
                    update_field('users_user_'. $x .'_password', $password, $agency_id);
                }else{
                    $validated = false;
                }
                break;
            }

        }

        $agency_permalink = get_permalink( $agency_id );

        if( ! $validated )
        {
            header('Location: '. $agency_permalink .'?parameters='. $parameters);
        }else{
            header('Location: '. $agency_permalink);
        }

        break;

    //-----END ACTION - AGENCY PAGE CHANGE USER PASSWORD----------------------------------------------------------------
    //-----ACTION - UPLOAD XLS AND PREPARE TO INSERT--------------------------------------------------------------------

    case 'upload_excel_and_prepare_to_insert':

        $agency_id = (int) htmlspecialchars( $_POST['agency'] );
        $selected_vendor_id = false; // Assigned in case 10 of parsing document function

        $return = false;

        $any_error = false;

        $post_file = $_FILES['agency_orders_file'];

        $tables_array = array();

        if( $post_file && $agency_id )
        {
            require_once dirname(__FILE__) .'/../class/XLSXReader.php';

            $xlsx = new XLSXReader($post_file['tmp_name']);
            $sheetNames = $xlsx->getSheetNames();

            $session_data = array();

            foreach($sheetNames as $sheetName)
            {
                $table_data = array();

                $sheet = $xlsx->getSheet( $sheetName );

                //formats
                $formatted_sheet = array();
                $rows_counter = 0;

                foreach( $sheet->getData() as $row )
                {
                    $new_row = array();
                    if( $rows_counter != 1) // Example row control
                    {
                        if ($rows_counter > 0) //not parse first row
                        {
                            $cells_counter = 0;
                            foreach ($row as $cell) {
                                $new_cell = array();
                                switch ($cells_counter) {
                                    case 0: // Tipo ID

                                        switch ($cell) {
                                            case 'dni':
                                            case 'nie':
                                            case 'passport':
                                                $new_cell = $cell;
                                                break;

                                            default:
                                                $new_cell = 'passport';
                                                break;
                                        }

                                        break;

                                    case 4: // Género

                                        if (!empty($cell)) {
                                            switch (strtolower($cell)) {
                                                case 'man':
                                                case 'h':
                                                case 'hombre':
                                                    $new_cell = 'hombre';
                                                    break;

                                                case 'woman':
                                                case 'm':
                                                case 'mujer':
                                                    $new_cell = 'mujer';
                                                    break;

                                                default:
                                                    $new_cell = 'Error';
                                                    break;
                                            }

                                        } else {
                                            $new_cell = 'Error';
                                        }


                                        break;

                                    case 6: // Seguro dental

                                        switch ($cell) {
                                            case 'si':
                                            case 'sí':
                                            case 'Si':
                                            case 'Sí':
                                            case 'Yes':
                                            case 'yes':
                                                $new_cell = 'enabled';
                                                break;

                                            default:
                                                $new_cell = 'disabled';
                                                break;
                                        }

                                        break;

                                    case 5: // Fecha de nacimiento
                                    case 7: // F. inicio viaje
                                    case 8: // F. final viaje
                                        $new_cell = str_replace('.', '/', $cell);
                                        break;

                                    case 9: // Insurer

                                        $selected_vendor_id = get_owner_vendors($agency_id)[0];

                                        if ($selected_vendor_id) {

                                            $insurers_selection = get_field('insurers_selection', $selected_vendor_id);

                                            if (empty($cell)) // if insurance isn't passed
                                            {

                                                switch ($insurers_selection) {
                                                    case 'selected_by_user': // If is empty and
                                                        $new_cell = 'Error';
                                                        break;

                                                    default:
                                                        $new_cell = $insurers_selection;
                                                        break;
                                                }

                                            } else { // Insurance is passed

                                                switch ($insurers_selection) {
                                                    case 'selected_by_user': // If is empty and
                                                        $insurers_list = get_field('insurers_list', $selected_vendor_id);

                                                        $found = false;
                                                        foreach ($insurers_list AS $insurer) {
                                                            if (strtolower($cell) == $insurer) {
                                                                $found = true;
                                                            }
                                                        }

                                                        $new_cell = $found ? strtolower($cell) : 'Error';

                                                        break;

                                                    default:
                                                        $new_cell = $insurers_selection;
                                                        break;
                                                }

                                            }

                                            echo $insurers_selection;
                                        }

                                        break;

                                    default:
                                        $new_cell = $cell;
                                        break;
                                }

                                $new_row[] = $new_cell;

                                $cells_counter++;
                            }

                            // Extra data: product_id
                            $product_id = get_owner_vendors($agency_id)[0];
                            $new_row[] = $product_id;

                        } else {
                            $cells_counter = 0;
                            foreach ($row as $cell) {
                                $new_cell = $cell;

                                $new_row[] = $new_cell;

                                $cells_counter++;
                            }

                        }
                        $formatted_sheet[] = $new_row;
                    }

                    $rows_counter++;
                }

                ob_start();
                ?>

                <h3>Pedidos a agregar<?php // echo $sheetName; ?></h3>
                <table class="agency_orders_table"><?php
                    $row_counter = 0;

                    foreach( $formatted_sheet as $row )
                    {
                        echo "<tr>";
                        $cell_counter = 0;
                        foreach($row as $cell)
                        {
                            if( $row_counter > 0) // Header control
                            {
                                $td_class = '';
                                if( $cell === 'Error' )
                                {
                                    $td_class = 'has_error';
                                }
                                else
                                {
                                    switch ($cell_counter)
                                    {
                                        case 0: // Tipo ID
                                            $cell = get_betterized_name( $cell );

                                            break;

                                        case 4: // Género
                                            switch ($cell)
                                            {
                                                case 'hombre': $cell = 'Hombre'; break;
                                                case 'mujer': $cell = 'Mujer'; break;
                                                default: $cell = 'No seleccionado'; break;
                                            }
                                            break;

                                        case 6: // Dental Insurance
                                            switch ($cell)
                                            {
                                                case 'enabled': $cell = 'Sí'; break;
                                                case 'disabled': $cell = 'No'; break;
                                            }
                                            break;

                                        case 9: // Insurance
                                            $cell = ucfirst( $cell );
                                            break;

                                        case 10: // product_id
                                            $cell = false;
                                            break;

                                        default: break;
                                    }
                                }
                            }

                            if( $cell )
                            {
                                echo '<td class="'. $td_class .'">' . $cell . '</td>';
                            }


                            $cell_counter++;
                        }

                        //find errors
                        foreach ( $row AS $cell )
                        {
                            if( $cell === 'Error' )
                            {
                                $any_error = true;
                            }
                        }

                        echo "</tr>";


                        $row_counter++;
                    }
                    ?>
                </table>

                <?php
                if ($row_counter == 1) {
                        ?><div class="register_agency_orders_error">Este documento no tiene datos</div><?php 
                    } elseif (! $any_error) {
                        ?>
                    <form method="post" action="<?php 
                        echo ACTIONS_URI .'bulk_actions.php';
                        ?>">
                        <input type="hidden" name="action" value="register_agency_orders" />
                        <input type="hidden" name="agency" value="<?php 
                        echo $agency_id;
                        ?>">
                        <button class="register_agency_orders">Registrar pedidos</button>
                    </form>
                    <?php 
                    } else
                    {
                        ?><div class="register_agency_orders_error">Hay campos erroneos en este documento</div><?php
                    }

                $table_html = ob_get_clean();

                $table_to_session = array(
                    base64_encode( serialize($formatted_sheet) ),
                    base64_encode( $table_html ),
                );

                $session_data[] = $table_to_session;
            }

            $_SESSION['temp']['import_tables'][$agency_id] = $session_data;

            $agency_permalink = get_permalink( $agency_id );
            
            header('Location: '. $agency_permalink .'');
        }

        break;

    //-----END ACTION - UPLOAD XLS AND PREPARE TO INSERT----------------------------------------------------------------
    //-----ACTION - AGENCY USER COMMANDS INTERFACE----------------------------------------------------------------------

    case 'get_agency_user_commands_interface':

        $agency_id = htmlspecialchars($_POST['agency_id']);
        $loginmail = htmlspecialchars($_POST['loginmail']);

        $permalink = get_permalink( $agency_id );

        $parameters = array(
            'intervention' => 'password_generation_form',
            'user' => $loginmail,
        );

        $new_password_link = $permalink .'?parameters='. get_encrypted_array( $parameters );
        ?>
        Vínculo para generar nueva contraseña:<br><a href="<?php echo $new_password_link; ?>" target="_blank" style="word-break: break-all;"><?php echo $new_password_link; ?></a>
        <hr>
        <div class="agency_mail_button_admin agency_mail_button_generation_link">Enviar vínculo para generar la contraseña a<br><?php echo $loginmail; ?></div>
        <div class="agency_mail_button_admin agency_mail_button_remember_passwd">Enviar recordatorio de la contraseña a<br><?php echo $loginmail; ?></div>
        <?php

        break;

    //-----END ACTION - AGENCY USER COMMANDS INTERFACE------------------------------------------------------------------
    //-----ACTION - SEND PASSWORD GENERATION LINK-----------------------------------------------------------------------

    case 'send_remember_passwd_mail':

        $agency_id = htmlspecialchars($_POST['agency_id']);
        $loginmail = htmlspecialchars($_POST['loginmail']);
        $group_name = htmlspecialchars($_POST['group_name']);

        $permalink = get_permalink( $agency_id );

        $password = get_field('users_'. $group_name .'_password', $agency_id);

        ob_start();
        ?>
        <div class="uniblock">
            <h3>Recordatorio de sus datos de acceso</h3>
            Enlace de acceso: <a href="<?php echo $permalink; ?>">haga click aquí</a><br>
            Login: <?php echo $loginmail; ?><br>
            Contraseña: <?php echo $password; ?>
        </div>
        <?php
        $html = ob_get_clean();

        $to      = $loginmail;
        $subject = 'Universitasmundi - recordatorio de credenciales de acceso'; // ñ no funciona
        $message = $html;
        $headers = 'From: info@universitasmundi.com
Reply-To: info@universitasmundi.com
X-Mailer: PHP/' . phpversion();
        $headers  .= 'MIME-Version: 1.0
';
        $headers .= "Content-Type: text/html; charset=\"UTF-8\"\n";

        mail($to, $subject, $message, $headers);

        break;

    //-----END ACTION - SEND PASSWORD GENERATION LINK-------------------------------------------------------------------
    //-----ACTION - SEND NURIA ADVICE FORM MAIL-------------------------------------------------------------------------

    case 'send_nuria_order_modifications':

        $order_id = htmlspecialchars($_POST['order_id']);
        $email = htmlspecialchars($_POST['email']);
        $fields = htmlspecialchars($_POST['fields']);

        ob_start();
        ?>
        <div class="uniblock">
            <h3>Se han modificado manualmente los campos del pedido <?php echo $order_id; ?>:</h3>
            <?php
            $fields_array = explode(',', $fields);
            foreach ($fields_array AS $field)
            {
                echo trim($field) .'<br>';
            }
            ?>
        </div>
        <?php
        $html = ob_get_clean();

        $to      = $email;
        //$to      = 'eugenio@maldon.es'; //tests mail
        $subject = 'Universitasmundi - cambio de los datos del pedido '. $order_id; // ñ no funciona
        $message = $html;
        $headers = 'From: info@universitasmundi.com
Reply-To: info@universitasmundi.com
X-Mailer: PHP/' . phpversion();
        $headers  .= 'MIME-Version: 1.0
';
        $headers .= "Content-Type: text/html; charset=\"UTF-8\"\n";

        mail($to, $subject, $message, $headers);

        break;

    //-----END ACTION - SEND NURIA ADVICE FORM MAIL---------------------------------------------------------------------
    //-----ACTION - AGENCY USER SEND REMEMBER PASSWORD------------------------------------------------------------------

    case 'send_remember_passwd_mail':

        $agency_id = htmlspecialchars($_POST['agency_id']);
        $loginmail = htmlspecialchars($_POST['loginmail']);
        $group_name = htmlspecialchars($_POST['group_name']);

        $permalink = get_permalink( $agency_id );

        $parameters = array(
            'intervention' => 'password_generation_form',
            'user' => $loginmail,
        );

        $new_password_link = $permalink .'?parameters='. get_encrypted_array( $parameters );

        ob_start();
        ?>
        <div class="uniblock">Haga click <a href="<?php echo $new_password_link; ?>">aquí</a> para generar nueva contraseña</div>
        <?php
        $html = ob_get_clean();

        $to      = $loginmail;
        $subject = 'Universitasmundi - genere credenciales de acceso'; // ñ no funciona
        $message = $html;
        $headers = 'From: info@universitasmundi.com
Reply-To: info@universitasmundi.com
X-Mailer: PHP/' . phpversion();
        $headers  .= 'MIME-Version: 1.0
';
        $headers .= "Content-Type: text/html; charset=\"UTF-8\"\n";

        mail($to, $subject, $message, $headers);

        break;

    //-----END ACTION - AGENCY USER SEND REMEMBER PASSWORD--------------------------------------------------------------
    //-----ACTION - DEFAULT---------------------------------------------------------------------------------------------

    default:
        echo $return;
        break;

    //-----END ACTION - DEFAULT-----------------------------------------------------------------------------------------
}