<?php
/**
 * BookiFlex Core
 *
 * @package    BookiFlex
 * @subpackage Core
 * @author     BookiFlex
 * @copyright  Copyright (c) 2025 BookiFlex
 * @license    GPL-2.0-or-later
 *
 * @link       https://bookiflex.com
 */

declare(strict_types=1);

namespace BookiFlex\Core\Model\PaymentType;

defined( 'ABSPATH' ) || exit;

interface PaymentTypeInterface
{
    // Payment collection types
    public const PAYMENT_ON_ARRIVAL_TYPE   = 'on_arrival-payment';
    public const BANK_PAYMENT_TYPE         = 'bank-payment';
    public const BANK_PAYMENT_PAYABLE_TYPE = 'bank-payment-payable';
    public const INTERNET_PAYMENT_TYPE     = 'internet-payment';

    // Types that require payment record (payable = true)
    public const PAYABLE_TYPES = [
        self::BANK_PAYMENT_PAYABLE_TYPE,
        self::INTERNET_PAYMENT_TYPE,
    ];

    // Prepayment types
    public const FIRST_NIGHT_PREPAYMENT_TYPE = 'first-night';
    public const AMOUNT_PREPAYMENT_TYPE      = 'amount';

    // Available Before Arrival (ABA) conditions
    public const ABA_LTE_TYPE   = 'lte';
    public const ABA_GTE_TYPE   = 'gte';
    public const ABA_EQUAL_TYPE = 'equal';

    // Available Before Arrival (ABA) periods
    public const ABA_HOURS_PERIOD = 'hours';

	// ABA_DAYS uses business dates, not 24h periods.
	// This is intentional to avoid same-day booking issues.
    public const ABA_DAYS_PERIOD  = 'days';

    // Default values
    public const DEFAULT_PREPAYMENT_TYPE  = self::AMOUNT_PREPAYMENT_TYPE;
    public const DEFAULT_PREPAYMENT_VALUE = 0;
    public const DEFAULT_ABA_PERIOD       = self::ABA_DAYS_PERIOD;
    public const DEFAULT_ABA_CONDITION    = self::ABA_GTE_TYPE;
    public const DEFAULT_ABA_VALUE        = 0;
}
