<?php

namespace bff\contracts;

/**
 * Bills: Payment Gateway Provider
 * Provides gateway to pay
 */
interface PaymentProvider extends Provider
{
    /**
     * Payment system ways
     * Way currency - uppercase keyword ISO 4217
     * @return array [] - if not supported,
     *      example:
     *      [
     *          'way1' => ['title' => 'Way 1', 'currency' => 'USD'],
     *      ]
     */
    public function payWays(): array;

    /**
     * Payment system default currency uppercase keyword (ISO 4217)
     * Example: return 'USD';
     * @return string
     */
    public function payDefaultCurrency(): string;

    /**
     * Payment system pay form
     * @param string $way payment system way key
     * @param float $amount amount to pay
     * @param int $billID bill ID
     * @param string $billDescription bill description
     * @param array $extra additional payment information
     * @return string HTML
     */
    public function payForm(string $way, float $amount, int $billID, string $billDescription, array $extra = []): string;

    /**
     * Payment system pay process
     * @return \bff\http\Response
     */
    public function payProcess();

    /**
     * Payment system default logo url
     * @return string
     */
    public function payLogoUrl(): string;
}