<?php

/*
 * This file is part of the overtrue/wechat.
 *
 * (c) overtrue <i@overtrue.me>
 *
 * This source file is subject to the MIT license that is bundled
 * with this source code in the file LICENSE.
 */
namespace EasyWeChat\Payment\ProfitSharing;

use EasyWeChat\Payment\Kernel\BaseClient;
/**
 * Class Client.
 *
 * @author ClouderSky <clouder.flow@gmail.com>
 */
class Client extends BaseClient
{
    /**
     * {@inheritdoc}.
     */
    protected function prepends()
    {
        return ['sign_type' => 'HMAC-SHA256'];
    }
    /**
     * Add profit sharing receiver.
     * 服务商代子商户发起添加分账接收方请求.
     * 后续可通过发起分账请求将结算后的钱分到该分账接收方.
     *
     * @param array $receiver 分账接收方对象，json格式
     *
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
     *
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function addReceiver(array $receiver)
    {
        $params = ['appid' => $this->app['config']->app_id, 'receiver' => json_encode($receiver, JSON_UNESCAPED_UNICODE)];
        return $this->request('pay/profitsharingaddreceiver', $params);
    }
    /**
     * Delete profit sharing receiver.
     * 服务商代子商户发起删除分账接收方请求.
     * 删除后不支持将结算后的钱分到该分账接收方.
     *
     * @param array $receiver 分账接收方对象，json格式
     *
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
     *
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function deleteReceiver(array $receiver)
    {
        $params = ['appid' => $this->app['config']->app_id, 'receiver' => json_encode($receiver, JSON_UNESCAPED_UNICODE)];
        return $this->request('pay/profitsharingremovereceiver', $params);
    }
    /**
     * Single profit sharing.
     * 请求单次分账.
     *
     * @param $transactionId 微信支付订单号
     * @param $outOrderNo    商户系统内部的分账单号
     * @param array  $receivers     分账接收方列表
     *
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
     *
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function share($transactionId, $outOrderNo, array $receivers)
    {
        $params = ['appid' => $this->app['config']->app_id, 'transaction_id' => $transactionId, 'out_order_no' => $outOrderNo, 'receivers' => json_encode($receivers, JSON_UNESCAPED_UNICODE)];
        return $this->safeRequest('secapi/pay/profitsharing', $params);
    }
    /**
     * Multi profit sharing.
     * 请求多次分账.
     *
     * @param $transactionId 微信支付订单号
     * @param $outOrderNo    商户系统内部的分账单号
     * @param array  $receivers     分账接收方列表
     *
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
     *
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function multiShare($transactionId, $outOrderNo, array $receivers)
    {
        $params = ['appid' => $this->app['config']->app_id, 'transaction_id' => $transactionId, 'out_order_no' => $outOrderNo, 'receivers' => json_encode($receivers, JSON_UNESCAPED_UNICODE)];
        return $this->safeRequest('secapi/pay/multiprofitsharing', $params);
    }
    /**
     * Finish profit sharing.
     * 完结分账.
     *
     * @param array $params
     *
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
     *
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function markOrderAsFinished(array $params)
    {
        $params['appid'] = $this->app['config']->app_id;
        $params['sub_appid'] = null;
        return $this->safeRequest('secapi/pay/profitsharingfinish', $params);
    }
    /**
     * Query profit sharing result.
     * 查询分账结果.
     *
     * @param $transactionId 微信支付订单号
     * @param $outOrderNo    商户系统内部的分账单号
     *
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
     *
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function query($transactionId, $outOrderNo)
    {
        $params = ['sub_appid' => null, 'transaction_id' => $transactionId, 'out_order_no' => $outOrderNo];
        return $this->request('pay/profitsharingquery', $params);
    }
    /**
     * Profit sharing return.
     * 分账回退.
     *
     * @param $outOrderNo    商户系统内部的分账单号
     * @param $outReturnNo   商户系统内部分账回退单号
     * @param int    $returnAmount  回退金额
     * @param $returnAccount 回退方账号
     * @param $description   回退描述
     *
     * @return array|\EasyWeChat\Kernel\Support\Collection|object|\Psr\Http\Message\ResponseInterface|string
     *
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * @throws \GuzzleHttp\Exception\GuzzleException
     */
    public function returnShare($outOrderNo, $outReturnNo, $returnAmount, $returnAccount, $description)
    {
        $params = ['appid' => $this->app['config']->app_id, 'out_order_no' => $outOrderNo, 'out_return_no' => $outReturnNo, 'return_account_type' => 'MERCHANT_ID', 'return_account' => $returnAccount, 'return_amount' => $returnAmount, 'description' => $description];
        return $this->safeRequest('secapi/pay/profitsharingreturn', $params);
    }
}