/**
  * Orders endpoint
  */
 protected function orders($args)
 {
     // Manage informations
     $datas = $this->data;
     if (is_null($datas)) {
         $error = PowaTagErrorType::$BAD_REQUEST;
         return PowaTagAPI::powaError($error);
     }
     if ($this->verb == 'costs') {
         if (isset($datas->order)) {
             $customer = $datas->order->customer;
         } else {
             $customer = current($datas->orders)->customer;
         }
         if (PowaTagAPI::apiLog()) {
             PowaTagLogs::initAPILog('Process calculate Costs', PowaTagLogs::IN_PROGRESS, 'Customer : ' . $customer->firstName . ' ' . $customer->lastName);
         }
         if (PowaTagAPI::requestLog()) {
             PowaTagLogs::initRequestLog('Process calculate Costs', PowaTagLogs::IN_PROGRESS, $datas);
         }
         $powatagcosts = new PowaTagCosts($datas);
         if ($error = $powatagcosts->getError()) {
             $message = $error['message'];
             if (PowaTagAPI::apiLog()) {
                 PowaTagLogs::initAPILog('Process order', PowaTagLogs::ERROR, $message);
             }
             return PowaTagAPI::powaError($error);
         }
         if ($value = $powatagcosts->getSummary()) {
             if (PowaTagAPI::apiLog()) {
                 PowaTagLogs::initAPILog('Process calculate Costs', PowaTagLogs::SUCCESS, 'Customer : ' . $customer->firstName . ' ' . $customer->lastName);
             }
             if (PowaTagAPI::requestLog()) {
                 PowaTagLogs::initRequestLog('Process calculate Costs', PowaTagLogs::SUCCESS, $value);
             }
             return $value;
         } else {
             $error = $powatagcosts->getError();
             if (PowaTagAPI::apiLog()) {
                 PowaTagLogs::initAPILog('Process calculate Costs', PowaTagLogs::ERROR, $error['message']);
             }
             return PowaTagAPI::powaError($error);
         }
     } else {
         if (count($args) == 2 && Validate::isInt($args[0]) && ($args[1] = 'confirm-payment')) {
             //Three step payment confirmation
             if (PowaTagAPI::apiLog()) {
                 PowaTagLogs::initAPILog('Process payment', PowaTagLogs::IN_PROGRESS, 'Order ID : ' . $args[0]);
             }
             if (PowaTagAPI::requestLog()) {
                 PowaTagLogs::initRequestLog('Create payment', PowaTagLogs::IN_PROGRESS, $datas);
             }
             $payment = new PowaTagPayment($datas, (int) $args[0]);
             if ($id_order = $payment->confirmPayment()) {
                 if (PowaTagAPI::apiLog()) {
                     PowaTagLogs::initAPILog('Process payment', PowaTagLogs::SUCCESS, 'ID Order : ' . $id_order);
                 }
                 if (PowaTagAPI::requestLog()) {
                     PowaTagLogs::initRequestLog('Process payment', PowaTagLogs::SUCCESS, $id_order);
                 }
                 $data = array('providerTxCode' => isset($datas->paymentResult->providerTxCode) ? $datas->paymentResult->providerTxCode : 'providerTxCode Empty', 'message' => 'Authorization success order ' . $id_order . ' created');
                 if ($payment->checkOrderState($id_order, $data) == 'error') {
                     $this->setResponse($data['response']);
                 }
                 return $data;
             } else {
                 $error = $payment->getError();
                 if (PowaTagAPI::apiLog()) {
                     PowaTagLogs::initAPILog('Process payment', PowaTagLogs::ERROR, $error['message']);
                 }
                 return PowaTagAPI::powaError($error);
             }
         } else {
             if (!count($args)) {
                 //Two step payment or three step payment
                 if (isset($datas->order)) {
                     $customer = $datas->order->customer;
                 } else {
                     $customer = current($datas->orders)->customer;
                 }
                 if (PowaTagAPI::apiLog()) {
                     PowaTagLogs::initAPILog('Process order 123', PowaTagLogs::IN_PROGRESS, 'Customer : ' . $customer->firstName . ' ' . $customer->lastName);
                 }
                 if (PowaTagAPI::requestLog()) {
                     PowaTagLogs::initRequestLog('Create order', PowaTagLogs::IN_PROGRESS, $datas);
                 }
                 $order = new PowaTagOrders($datas);
                 if ($error = $order->getError()) {
                     $message = $error['message'];
                     if (PowaTagAPI::apiLog()) {
                         PowaTagLogs::initAPILog('Process order', PowaTagLogs::ERROR, $message);
                     }
                     return PowaTagAPI::powaError($error);
                 }
                 list($id_cart, $id_order, $message) = $order->validateOrder();
                 if ($id_order || $id_cart) {
                     if (PowaTagAPI::apiLog()) {
                         PowaTagLogs::initAPILog('Process order', PowaTagLogs::SUCCESS, 'Order has been created : ' . $id_order);
                     }
                     $link = new Link();
                     $cart = new Cart($id_cart);
                     $data = array('orderResults' => array(array('orderId' => $id_order ? $id_order : $id_cart, 'message' => $message, 'redirectUrl' => $link->getModuleLink('powatag', 'confirmation', array('id_cart' => (int) $id_cart, 'id_customer' => (int) $cart->id_customer)))));
                     if ($error = $order->getError()) {
                         return PowaTagAPI::powaError($error);
                     }
                     if ($order->checkOrderState($id_order, $data)) {
                         $this->setResponse($data['response']);
                     }
                     return $data;
                 } else {
                     $message = '';
                     $errorCode = '';
                     if ($error = $order->getError()) {
                         $message = $error['message'];
                     }
                     if (PowaTagAPI::apiLog()) {
                         PowaTagLogs::initAPILog('Process order', PowaTagLogs::ERROR, $message);
                     }
                     return PowaTagAPI::powaError($error);
                 }
             }
         }
     }
 }