<?php

namespace Assist\Pay\Events;

use Assist\Pay\Helper;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sale\Order;
use Bitrix\Sale\Payment;

class MainEvent
{
    /**
     * Кнопка подтвердить платеж отображается только если в платеже присутствует billnumber (PS_INVOICE_ID)
     * и статус оплаты (PS_STATUS_CODE) равен Delayed.
     *
     * Отправляет запрос с подтверждением платежа к API Assist
     *
     * @param $items
     * @return void
     */
    public static function addConfirmPaymentButton(&$items): void
    {
        if (str_contains(
                $_SERVER['REQUEST_URI'],
                'bitrix/admin/sale_order_payment_edit.php'
            ) && self::isAssistPaymentSystem()) {
            $orderId = $_GET['order_id'];
            $paymentId = $_GET['payment_id'];
            $payment = Helper::getPayment($orderId, $paymentId);

            if ($payment && Helper::isPaymentDelayed($payment)) {
                $items[] = array(
                    'TEXT' => Loc::getMessage('CONFIRM_BUTTON_NAME'),
                    'ICON' => '',
                    'TITLE' => Loc::getMessage('CONFIRM_BUTTON_NAME'),
                    'LINK' => '/bitrix/tools/assist_confirm_payment.php?order_id= ' . $orderId . '&payment_id=' . $paymentId,
                );
            }
        }
    }

    /**
     * Кнопка обновления статуса платежа PS_STATUS_CODE
     *
     * Обновляет статус платежа в зависимости от статуса в системе Assist
     *
     * @param $items
     * @return void
     */
    public static function addUpdatePaymentStateButton(&$items): void
    {
        if (str_contains(
                $_SERVER['REQUEST_URI'],
                'bitrix/admin/sale_order_payment_edit.php'
            ) && self::isAssistPaymentSystem()) {
            $orderId = $_GET['order_id'];
            $paymentId = $_GET['payment_id'];

            if ($orderId && $paymentId) {
                $items[] = array(
                    'TEXT' => Loc::getMessage('UPDATE_PAYMENT_STATE'),
                    'ICON' => '',
                    'TITLE' => Loc::getMessage('UPDATE_PAYMENT_STATE'),
                    'LINK' => '/bitrix/tools/assist_update_payment_state.php?order_id= ' . $orderId . '&payment_id=' . $paymentId,
                );
            }
        }
    }

    /**
     * @return bool
     */
    private static function isAssistPaymentSystem(): bool
    {
        try {
            $paymentId = $_GET['payment_id'];
            $orderId = $_GET['order_id'];
            $order = Order::load($orderId);
            $payments = $order->getPaymentCollection();
            $actionFile = null;

            /**
             * @var Payment $payment
             */
            foreach ($payments as $payment) {
                if ($payment->getId() == $paymentId) {
                    $paymentSystem = $payment->getPaySystem();
                    $actionFile = $paymentSystem->getField('ACTION_FILE');
                }
            }
        } catch (\Exception $exception) {
            return false;
        }

        return $actionFile === 'assist';
    }
}
