<?php
namespace app\home\service;

use app\model\RechargeApplyModel;
use app\model\UserBrokerageModel;
use app\model\UserLevelModel;
use think\facade\Db;

/**
 * 处理团队佣金业务
 */
class TeamService extends BaseHomeService
{
    public function getUserTeamCollect(int $user_id):array
    {
        //获取到level1人数

        $level_num=UserLevelModel::getUserLevelCount([
            'parent_id'=>$user_id
        ]);
        $level2_num=UserLevelModel::getUserLevelCount([
            'grandpa_id'=>$user_id
        ]);
        $level3_num=UserLevelModel::getUserLevelCount([
            'top_id'=>$user_id
        ]);

        //总人数
        $total_num=$level_num+$level2_num+$level3_num;

        $users_level=UserLevelModel::getUsers([
            'parent_id'=>$user_id
        ]);
        if(!empty($users_level)){
            $users_level_arr=array_column($users_level,'user_id');
            $pay_level=RechargeApplyModel::getUserPayNum($users_level_arr);
        }else{
            $pay_level=0;
        }
        $users_level2=UserLevelModel::getUsers([
            'grandpa_id'=>$user_id
        ]);
        if(!empty($users_level2)){
            $users_level2_arr=array_column($users_level2,'user_id');
            $pay_level2=RechargeApplyModel::getUserPayNum($users_level2_arr);
        }else{
            $pay_level2=0;
        }
        $users_level3=UserLevelModel::getUsers([
            'top_id'=>$user_id
        ]);
        if(!empty($users_level3)){
            $users_level3_arr=array_column($users_level3,'user_id');
            $pay_level3=RechargeApplyModel::getUserPayNum($users_level3_arr);
        }else{
            $pay_level3=0;
        }

        $total_pay=$pay_level+$pay_level2+$pay_level3;



        //总收入
        $level_back_num=UserBrokerageModel::getUserBrokerageNum([
            'user_id'=>$user_id,
            'level_type'=>1
        ],'brokerage_num');
        $level2_back_num=UserBrokerageModel::getUserBrokerageNum([
            'user_id'=>$user_id,
            'level_type'=>2
        ],'brokerage_num');
        $level3_back_num=UserBrokerageModel::getUserBrokerageNum([
            'user_id'=>$user_id,
            'level_type'=>3
        ],'brokerage_num');

        $total_back_num=$level_back_num+$level2_back_num+$level3_back_num;

        //今日收入
        $today=date('Y-m-d 00:00:00');
        $level_today_num=UserBrokerageModel::getUserBrokerageNum([
            ['user_id','=',$user_id],
            ['level_type','=',1],
            ['create_time','>=',$today],
        ],'brokerage_num');
        $level2_today_num=UserBrokerageModel::getUserBrokerageNum([
            ['user_id','=',$user_id],
            ['level_type','=',2],
            ['create_time','>=',$today],
        ],'brokerage_num');
        $level3_today_num=UserBrokerageModel::getUserBrokerageNum([
            ['user_id','=',$user_id],
            ['level_type','=',3],
            ['create_time','>=',$today],
        ],'brokerage_num');


        $today_back_num=$level_today_num+$level2_today_num+$level3_today_num;

        $result=[
            'total_num'=>[
                'reg_num'=>$total_num,
                'recharge_num'=>$total_pay,
                'back_num'=>$total_back_num,
                'today_back_num'=>$today_back_num
            ],
            'level1'=>[
                'reg_num'=>$level_num,
                'recharge_num'=>$pay_level,
                'back_num'=>$level_back_num,
                'today_back_num'=>$level2_today_num
            ],
            'level2'=>[
                'reg_num'=>$level2_num,
                'recharge_num'=>$pay_level2,
                'back_num'=>$level2_back_num,
                'today_back_num'=>$level2_today_num
            ],
            'level3'=>[
                'reg_num'=>$level3_num,
                'recharge_num'=>$pay_level3,
                'back_num'=>$level3_back_num,
                'today_back_num'=>$level3_today_num
            ]

        ];

        return $this->toData(0,'Request successful.',$result);
    }

    public function getUserTeamBack(array $data) : array
    {
        $list=UserBrokerageModel::getUserBrokerageList($data);
        return $this->toData(0,'Request successful.',$list);
    }
    public function getUserTeamList(array $data):array
    {
        $list=UserLevelModel::getUserTeamList($data);
        return $this->toData(0,'Request successful.',$list);
    }

    //注册返佣
    public function regBrokerage(int $parent_id,int $grandpa_id,int $top_id)
    {
        $reg_brokerage_stting=$this->getBrokerageRegSetting();
        $reg_parent_brokerage=$reg_brokerage_stting['parent_fee'];
        $reg_grandpa_brokerage=$reg_brokerage_stting['grandpa_fee'];
        $reg_top_brokerage=$reg_brokerage_stting['top_fee'];
        if($reg_parent_brokerage>0 && $parent_id>0){
            $this->addUserBrokerage([
                'user_id'=>$parent_id,
                'level_type'=>1,
                'back_type'=>0,
                'brokerage_num'=>$reg_parent_brokerage,
                'service_fee'=>0,
                'create_time'=>date('Y-m-d H:i:s'),
            ]);
        }
        if($reg_grandpa_brokerage>0 && $grandpa_id>0){
            $this->addUserBrokerage([
                'user_id'=>$grandpa_id,
                'level_type'=>2,
                'back_type'=>0,
                'brokerage_num'=>$reg_parent_brokerage,
                'service_fee'=>0,
                'create_time'=>date('Y-m-d H:i:s'),
            ]);
        }
        if($reg_top_brokerage>0 && $top_id>0){
            $this->addUserBrokerage([
                'user_id'=>$top_id,
                'level_type'=>3,
                'back_type'=>0,
                'brokerage_num'=>$reg_parent_brokerage,
                'service_fee'=>0,
                'create_time'=>date('Y-m-d H:i:s'),
            ]);
        }
    }
    private function addUserBrokerage($data)
    {
        UserBrokerageModel::InsertUserBrokerage($data);
        //查询提现资金账户信息
        $from_account=(new WalletService())->lockUserBalance(1,$data['user_id']);
        if(!empty($from_account)){
            $from_update['usable_num']=$from_account['usable_num']+$data['brokerage_num'];
            (new WalletService())->updateUserBalance(1,$from_update,$data['user_id']);
            $to_log['user_id']=$data['user_id'];
            $to_log['change_type']=9;
            $to_log['change_num']=$data['brokerage_num'];
            $to_log['before_num']=$from_update['usable_num'];
            (new WalletService())->addUserBalanceLog(1,$to_log);
        }
    }


}