<?php

namespace app\common\logic;

use app\common\enum\OrderEnum;
use app\common\model\system_store\SystemStore;
use app\common\model\user\User;
use app\common\model\user\UserAddress;

class CommissionLogic extends BaseLogic
{
    /**
     * 走村长分润
     */
    public static function setVillage($order, $village_uid = 0, $brigade_uid = 0, $transaction_id = 0)
    {
        $user_1 = self::user($order, 0.05, $transaction_id, $village_uid, 14); //村长
        $user_2 = self::user($order, 0.03, $transaction_id, 0, 12); //会员、厨师
        $user_3 = self::user($order, 0.01, $transaction_id, $brigade_uid, 15); //队长

        $platform = self::platform($order, 0.02, $transaction_id); //平台
        $store = self::store($order, 0.05, $transaction_id, 0); //门店
        $attrition = self::attrition($order, 0.02, $transaction_id, 16); //损耗

        $moeny = bcadd(bcadd(bcadd(bcadd($user_1, $user_2, 2), $user_3, 2), $platform, 2), bcadd($store, $attrition, 2), 2);
        self::suppliter($order, $moeny, $transaction_id);
    }
    /**
     * 走队长分润
     */
    public static function setBrigade($order, $village_uid = 0, $brigade_uid = 0, $transaction_id = 0)
    {
        $user_1 = self::user($order, 0.05, $transaction_id, $brigade_uid, 15); //队长
        $user_2 = self::user($order, 0.03, $transaction_id, 0, 12); ////会员、厨师
        $user_3 = self::user($order, 0.01, $transaction_id, $village_uid, 14); //村长

        $platform = self::platform($order, 0.02, $transaction_id); //平台
        $store = self::store($order, 0.05, $transaction_id, 0); //门店
        $attrition = self::attrition($order, 0.02, $transaction_id, 16); //损耗

        $moeny = bcadd(bcadd(bcadd(bcadd($user_1, $user_2, 2), $user_3, 2), $platform, 2), bcadd($store, $attrition, 2), 2);
        self::suppliter($order, $moeny, $transaction_id);
    }
    /**
     * 走厨师分润
     */
    public static function setCook($order, $village_uid = 0, $brigade_uid = 0, $transaction_id = 0)
    {
        if($order['spread_uid']<=0){
            $uid=$order['uid'];
        }else{
            $uid=$order['spread_uid'];
        }
        $user_1 = self::user($order, 0.07, $transaction_id, $uid, 12); //会员、厨师
        $user_2 = self::user($order, 0.01, $transaction_id, $village_uid, 14); //村长
        $user_3 = self::user($order, 0.01, $transaction_id, $brigade_uid, 15); //队长
        $platform = self::platform($order, 0.02, $transaction_id); //平台
        $store = self::store($order, 0.05, $transaction_id, 0); //门店
        $attrition = self::attrition($order, 0.02, $transaction_id, 16); //损耗
        $moeny = bcadd(bcadd(bcadd(bcadd($user_1, $user_2, 2), $user_3, 2), $platform, 2), bcadd($store, $attrition, 2), 2);
        self::suppliter($order, $moeny, $transaction_id);
    }

    /**
     * 走线下分润
     */
    public static function setStore($order, $transaction_id = 0)
    {
        $platform = self::platform($order, 0.02, $transaction_id); //平台
        $store = self::store($order, 0.05, $transaction_id, 0); //门店
        $attrition = self::attrition($order, 0.01, $transaction_id, 16); //损耗
        $moeny = bcadd(bcadd($platform, $store, 2), $attrition, 2);
        self::suppliter($order, $moeny, $transaction_id);
    }


    /**
     * 平台分润
     */
    public static function platform($order, $platformRate, $transaction_id)
    {
        $financeLogic = new StoreFinanceFlowLogic();
        $financeLogic->order = $order;
        $financeLogic->user['uid'] = $order['uid'];
        $pay_price = $order['pay_price'];
        if (isset($order['dealVipAmount']) && $order['dealVipAmount'] > 0) {
            $pay_price = bcsub($order['pay_price'], $order['dealVipAmount'], 2);
        }
        $fees = bcdiv(bcmul($pay_price, $platformRate, 2), 1, 2);
        if ($fees > 0) {
            $financeLogic->in($transaction_id, $fees, OrderEnum::ORDER_HANDLING_FEES, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);  //平台手续费
            $financeLogic->out($transaction_id, $fees, OrderEnum::ORDER_HANDLING_FEES, $order['store_id'], $order['staff_id'], 0, $order['pay_type']); //商户平台手续费支出
            $financeLogic->save();
        }
        return $fees;
    }
    /**
     * 供应链订单获得
     */
    public static function suppliter($order, $platformRate, $transaction_id)
    {
        $financeLogic = new StoreFinanceFlowLogic();
        $financeLogic->order = $order;
        $financeLogic->user['uid'] = $order['uid'];
        $pay_price = $order['pay_price'];
        if (isset($order['dealVipAmount']) && $order['dealVipAmount'] > 0) {
            $pay_price = bcsub($order['pay_price'], $order['dealVipAmount'], 2);
        }
        $fees = bcsub($pay_price, $platformRate, 2);
        if ($fees > 0) {
            $financeLogic->in($transaction_id, $fees, OrderEnum::SUPPLIER_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
            $financeLogic->out($transaction_id, $fees, OrderEnum::SUPPLIER_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
            $financeLogic->save();
        }
    }
    /**
     * 门店分润
     */
    public static function store($order, $platformRate, $transaction_id, $uid)
    {
        $financeLogic = new StoreFinanceFlowLogic();
        $financeLogic->user['uid'] = $order['uid'];
        $financeLogic->other_arr['vip_uid'] = $uid;
        $financeLogic->order = $order;
        $financeLogic->in($transaction_id, $order['pay_price'], OrderEnum::USER_ORDER_PAY, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);  //用户订单支付

        //缴纳齐全了就加商户没有就加到平台
        $money_limt = SystemStore::where('id', $order['store_id'])->field('paid_deposit,security_deposit')->find();
        $deposit = bcsub($money_limt['security_deposit'], $money_limt['paid_deposit'], 2); //保证金剩余额度
        $pay_price = $order['pay_price'];
        if (isset($order['dealVipAmount']) && $order['dealVipAmount'] > 0) {
            $pay_price = bcsub($order['pay_price'], $order['dealVipAmount'], 2);
        }
        $store_profit = bcmul($pay_price, $platformRate, 2);
        if ($deposit > 0) {
            if ($deposit > $store_profit) {
                if ($store_profit > 0) {
                    $financeLogic->out($transaction_id, $store_profit, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
                    $financeLogic->in($transaction_id, 0, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);  //平台手续费
                }
            } else {
                $money = bcsub($store_profit, $deposit, 2);
                if ($deposit > 0) {
                    $financeLogic->out($transaction_id, $deposit, OrderEnum::ORDER_MARGIN, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
                }
                if ($money) {
                    $financeLogic->in($transaction_id, $money, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);  //平台手续费
                }
            }
        } else {
            if ($store_profit > 0) {
                $financeLogic->in($transaction_id, $store_profit, OrderEnum::MERCHANT_ORDER_OBTAINS, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);  //平台手续费
            }
        }
        $financeLogic->save();
        return $store_profit;
    }

    /**
     * 分给用户
     */
    public static function user($order, $userRate, $transaction_id, $uid = 0, $enum = 0)
    {
        $financeLogic = new StoreFinanceFlowLogic();
        $pay_price = $order['pay_price'];
        if (isset($order['dealVipAmount']) && $order['dealVipAmount'] > 0) {
            $pay_price = bcsub($order['pay_price'], $order['dealVipAmount'], 2);
        }
        $fees = bcmul($pay_price, $userRate, 2);
        if ($fees > 0) {
            //记录用户余额收入
            // if ($uid) {
                // if(in_array($enum,[14,15])&&$userRate==0.05){
                //     $purchase_funds=User::where('id', $uid)->value('purchase_funds');
                //     if($purchase_funds>0){
                //         $fees_two = bcmul($purchase_funds, $userRate, 2);
                //         if($fees_two<$fees){
                //             $fees=$fees_two;
                //         }
                //     }
                // }
                // if($enum==12&&$userRate==0.07){
                //     $purchase_funds=User::where('id', $uid)->value('purchase_funds');
                //     if($purchase_funds>0){
                //         $fees_two = bcmul($purchase_funds, $userRate, 2);
                //         if($fees_two<$fees){
                //             $fees=$fees_two;
                //         }
                //     }
                // }
            //     $GiveUser = User::where('id', $order['uid'])->find();
            //     $capitalFlowDao = new CapitalFlowLogic($GiveUser);
            //     $capitalFlowDao->userIncome('system_balance_add', 'order', $order['id'], $fees);
            // }
            $financeLogic->user['uid'] = $order['uid'];
            $financeLogic->other_arr['vip_uid'] = $uid;
            $financeLogic->order = $order;
            $financeLogic->in($transaction_id, $fees, $enum, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
            $financeLogic->out($transaction_id, $fees, $enum, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
            $financeLogic->save();
        }
        return $fees;
    }

    /**
     * 损耗金
     */
    public static function attrition($order, $userRate, $transaction_id, $enum)
    {
        $financeLogic = new StoreFinanceFlowLogic();
        $financeLogic->order = $order;
        $financeLogic->user['uid'] = $order['uid'];
        $pay_price = $order['pay_price'];
        if (isset($order['dealVipAmount']) && $order['dealVipAmount'] > 0) {
            $pay_price = bcsub($order['pay_price'], $order['dealVipAmount'], 2);
        }
        $fees = bcmul($pay_price, $userRate, 2);
        if ($fees > 0) {
            $financeLogic->in($transaction_id, $fees, $enum, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
            $financeLogic->out($transaction_id, $fees, $enum, $order['store_id'], $order['staff_id'], 0, $order['pay_type']);
            $financeLogic->save();
        }
        return $fees;
    }
}