<?php

namespace domain\Payment;

use domain\Order\Order\Order;
use domain\User\User\User;
use domain\_\AbstractRepository;

class PaymentRepository extends AbstractRepository
{
    protected PaymentRepositoryQuery $query;

    public function loadDependencies(): void
    {
        $this->loadQuery(PaymentRepositoryQuery::class);
    }

    public function getDefaultOptionsSearch(): array
    {
        return [
            self::WITH => [
                'user',
                'order',
                'userAction'
            ],
            self::JOIN_WITH => [],
            self::ORDER_BY => Payment::tableName() . '.date ASc',
            self::ATTRIBUTE_ID_PRODUCER => Payment::tableName() . '.id_producer'
        ];
    }

    public function getByOrder(Order $order)
    {
        return $this->createDefaultQuery()
            ->filterByOrder($order)
            ->find();
    }

    public function queryPaymentsCreditHistoryByUser(User $user)
    {
        return $this->createDefaultQuery()
            ->filterByUser($user)
            ->filterIsCredit()
            ->orderBy('date DESC');
    }

    public function findPaymentsCreditHistoryByUser(User $user): array
    {
        return $this->queryPaymentsCreditHistoryByUser($user)->find();
    }
}