<?php

namespace app\repository;

use app\model\Business;
use app\model\Coupon;
use app\model\CouponMain;
use app\model\CouponType;
use app\model\UsingRule;
use app\service\Repository;
use app\traits\CouponBillTrait;
use app\traits\CouponMainTrait;
use Exception;
use think\Collection;
use think\Db;

use think\Model;

/**
 * 优惠券 相关操作
 *
 * Class CouponRepository
 * @package app\repository
 * @method self getInstance(Model $model = null) static
 */
class CouponRepository extends Repository
{
    use CouponMainTrait;
    use CouponBillTrait;
    /**
     * 优惠券持有信息列表
     *
     * @param $id
     * @param $keyword
     * @param $page
     * @param $size
     * @return array
     * @throws \Exception
     */
    public function couponMainHasList($id, $keyword, $page, $size)
    {
        return Coupon::findList(["id" => $id], [], $page, $size, function ($q) use ($keyword) {
            if (!empty($keyword)) {
                return $q::hasWhere('account', function ($q) use ($keyword) {
                    $q->where('nick_name', 'like', "%" . $keyword . "%")->field("nick_name,avatar_url");
                });
            } else {
                return $q->with(["account" => function ($query) {
                    $query->field("nick_name,avatar_url");
                }]);
            }
        }, ["id" => "desc"]);
    }

    /**
     * 获取优惠卷类型
     *
     * @param array $fields
     * @param array $order
     * @return Collection
     */
    public function getCouponTypeAll(array $fields = [], array $order = ["id" => "desc"])
    {
        try {
            return CouponType::order($order)->field($fields)->select();
        } catch (\Exception $e) {
            return new Collection();
        }
    }

    /**
     * 发布优惠券  扣除商家余额
     * @param $data
     * @param $totalMoney
     * @param $usingRule 使用规则
     */
    public function releaseCouponMain($data, $totalMoney,array $usingRule)
    {
        //创建优惠券根表
        $couponMain = CouponMain::create($data);
        //创建优惠券使用规则
        $usingRule["coupon_id"] = $couponMain->id;
        UsingRule::create($usingRule);
        //Business::where("code", $data["business_code"])->dec("balance", $totalMoney)->update();
    }

    /**
     * 查询商家发布的优惠卷列表
     *
     * @param array $where
     * @param array $fields
     * @param int $page
     * @param int $size
     * @param callable|null $call
     * @param array $sortOrder
     * @return array
     * @throws Exception
     */
    public function findCouponMainList(array $where, array $fields = [], int $page = 1, int $size = 0, callable $call = null, array $sortOrder = []): array
    {
        return CouponMain::findList($where, $fields, $page, $size, $call, $sortOrder);
    }

    /**
     * 写入一个领取优惠券
     * @param array $data
     * @return Coupon|Model
     */
    public function receiveCoupon(array $data)
    {
        return Coupon::create($data);
    }





}