<?php
namespace Formipay\Shipping;
use Formipay\Traits\SingletonTrait;
use Formipay\Shipping\Shipping;

if ( ! defined( 'ABSPATH' ) ) exit;

class FlatRate extends Shipping {

    use SingletonTrait;

    private $shipping_method = 'flat_rate';

    protected function __construct() {

        parent::__construct();

        add_filter( 'formipay/product-config/tab:shipping/method',     [$this, 'add_shipping_method'], 15 );
        add_filter( 'formipay/product-config/tab:shipping',            [$this, 'add_shipping_settings'], 15 );

        // Add to order details
        add_filter( 'formipay/order/order-details',                 [$this, 'add_shipping_to_order_details'], 99, 3 );

    }

    public function add_shipping_method($shipping_methods){

        $shipping_methods['flat_rate'] = [
            'method' => __( 'Flat Rate', 'formipay' ),
        ];

        return $shipping_methods;

    }

    public function add_shipping_settings($fields) {

        $flat_rate_fields = array(
            $this->shipping_method.'_group' => array(
                'type' => 'group_title',
                'label' => __( 'Flat Rate Setup', 'formipay' ),
                'dependency' => array(
                    array(
                        'key' => 'product_type',
                        'value' => 'physical',
                        'section' => 'general'
                    ),
                    array(
                        'key' => 'shipping_method',
                        'value' => 'flat_rate'
                    )
                ),
                'dependencies' => '&&',
                'group' => 'started'
            ),
            $this->shipping_method.'_type' => array(
                'type' => 'select',
                'label' => __( 'Type', 'formipay' ),
                'options' => array(
                    'fixed' => __( 'Fixed', 'formipay' ),
                    'percentage' => __( 'Percentage', 'formipay' )
                ),
                'value' => 'fixed',
                'dependency' => array(
                    array(
                        'key' => 'product_type',
                        'value' => 'physical',
                        'section' => 'general'
                    ),
                    array(
                        'key' => 'shipping_method',
                        'value' => 'flat_rate'
                    )
                ),
                'dependencies' => '&&',
            ),
            $this->shipping_method.'_amount' => array(
                'type' => 'number',
                'label' => __( 'Amount', 'formipay' ),
                'value' => '10',
                'dependency' => array(
                    array(
                        'key' => 'product_type',
                        'value' => 'physical',
                        'section' => 'general'
                    ),
                    array(
                        'key' => 'shipping_method',
                        'value' => 'flat_rate'
                    )
                ),
                'dependencies' => '&&',
            ),
            $this->shipping_method.'_label' => array(
                'type' => 'text',
                'label' => __( 'Label', 'formipay' ),
                'description' => __( 'This will be shown in Order Review and Order Details', 'formipay' ),
                'value' => __( 'Shipping Fee', 'formipay' ),
                'dependency' => array(
                    array(
                        'key' => 'product_type',
                        'value' => 'physical',
                        'section' => 'general'
                    ),
                    array(
                        'key' => 'shipping_method',
                        'value' => 'flat_rate'
                    )
                ),
                'dependencies' => '&&',
                'group' => 'ended'
            ),
        );

        foreach($flat_rate_fields as $key => $value){
            $fields[$key] = $value;
        }
        
        return $fields;

    }

    public function add_shipping_to_order_details( $details, $form_id, $order_data ) {

        if( formipay_get_post_meta($form_id, 'product_type') == 'physical' && formipay_get_post_meta($form_id, 'shipping_method')){

            $amount = floatval( formipay_price_format( formipay_get_post_meta( $form_id, 'flat_rate_amount' ) ) );

            if( formipay_get_post_meta($form_id, 'flat_rate_type') == 'percentage' ) {
                $price = floatval( formipay_get_post_meta($form_id, 'product_price') );
                $calculate = $price * $amount / 100;
                $amount = floatval($calculate);
            }

            $details[] = [
                'item'      => formipay_get_post_meta($form_id, 'flat_rate_label'),
                'amount'    => $amount,
                'subtotal'  => $amount
            ];

        }
        
        return $details;

    }

}