<?php
namespace Base\Service;

use Base\Facade\Request;

class MarketService
{
    public function shift($marketShift)
    {
        $formId = $marketShift['form_id'];
        $promoteId = $marketShift['promote_id'];
        $toId = $marketShift['to_id'];
        $time = $marketShift['split_time'] == 0 ? null : $marketShift['split_time'];
        
        $promote = M('promote', 'tab_')->field(['chain', 'id', 'level', 'admin_id'])->where(['id' => $promoteId, 'admin_id' => $formId])->find();

        if (!$promote) {
            throw new \Exception('会长不存在');
        }
        if ($promote['level'] != 1) {
            throw new \Exception('该账号非会长');
        }
        $promotes = (new PromoteService)->getAllChildren($promote, 0, ['id']);
        $promoteIds = [$promote['id']];
        $promoteIds = array_merge(array_column($promotes, 'id'), $promoteIds);

        $this->shiftPromote($formId, $toId);
        $this->shiftSpend($promoteIds, $formId, $toId, $time);
        $this->shiftDeposit($promoteIds, $formId, $toId, $time);
    }

    private function shiftPromote($promoteId, $formId, $toId, $time = null)
    {
        $map = [];
        $map['id'] = $promoteId;
        M('promote', 'tab_')->where($map)->save(['admin_id' => $toId]);
    }

    private function shiftSpend($promoteIds, $formId, $toId, $time = null)
    {
        $map = [];
        $map['promote_id'] = ['in', $promoteIds];
        $map['market_admin_id'] = $formId;
        if ($time) {
            $map['pay_time'] = ['egt', $time];
        }

        $count = M('spend', 'tab_')->where($map)->count();
        $limit = 50;
        $pageCount = ceil($count/$limit);
        for ($page = 0; $page <= $pageCount; $page ++) {
            M('spend', 'tab_')->where($map)->limit($limit)->save(['market_admin_id' => $toId]);
        }
        M('spend', 'tab_')->where($map)->save(['market_admin_id' => $toId]);
    }

    private function shiftDeposit($promoteIds, $formId, $toId, $time = null)
    {
        $map = [];
        $map['promote_id'] = ['in', $promoteIds];
        $map['market_admin_id'] = $formId;
        if ($time) {
            $map['create_time'] = ['egt', $time];
        }

        $count = M('deposit', 'tab_')->where($map)->count();
        $limit = 50;
        $pageCount = ceil($count/$limit);
        for ($page = 0; $page <= $pageCount; $page ++) {
            M('deposit', 'tab_')->where($map)->limit($limit)->save(['market_admin_id' => $toId]);
        }
        M('deposit', 'tab_')->where($map)->save(['market_admin_id' => $toId]);
    }
}