<?php

namespace app\api\controller;

use app\common\controller\Api;
use think\Db;
/**
 * 靓号
 */
class Uidsale extends Api
{
    protected $noNeedLogin = [];
    protected $noNeedRight = ['*'];

    //靓号首页
    public function lists(){
        $keyword = input('keyword','');

        $typelist = Db::name('uidsale_type')->order('id asc')->select();

        $map = [
            'status'   => 0,  //未卖出
            'saletime' => 0,  //卖出时间
            'user_id'  => 0,  //目前所属用户
            'is_show'  => 1,  //上架
        ];
        if(!empty($keyword)){
            $map['new_id'] = ['LIKE','%'.$keyword.'%'];
        }
        $uidlist = Db::name('uidsale')->field('id,new_id,price,type_id')->where($map)->order('id asc')->select();

        foreach($typelist as $key => &$val){
            $val['child'] = [];
            foreach($uidlist as $k => $v){
                if($v['type_id'] == $val['id']){
                    $val['child'][] = $v;
                }
            }
            //去掉空的组
            if(empty($val['child'])){
                unset($typelist[$key]);
            }
        }

        //因为上面用了unset,数组有了键,前端不显示,重组一个新数组
        $result = [];
        foreach($typelist as $key1 => $val1){
            $result[] = $val1;
        }

        $this->success(1,$result);
    }


    //买靓号
    public function buy_one(){
        if(!$this->apiLimit()){
            $this->error('操作频繁');
        }

        $id = input('id',0);
        if(!$id){
            $this->error();
        }

        Db::startTrans();

        //检查
        $map = [
            'status'   => 0,  //未卖出
            'saletime' => 0,  //卖出时间
            'user_id'  => 0,  //目前所属用户
            'is_show'  => 1,  //上架
        ];
        $info = Db::name('uidsale')->field('id,price,new_id')->where($map)->where('id',$id)->lock(true)->find();
        if(empty($info)){
            Db::rollback();
            $this->error('此靓号已售出或已下架,请刷新重试');
        }

        //扣金币
        if($info['price'] > 0){
            $rs_wallet = model('wallet')->lockChangeAccountRemain($this->auth->id,$info['price'],'-',0,'购买靓号',36,'jewel');
            if($rs_wallet['status'] === false){
                Db::rollback();
                $this->error('购买靓号付费失败');
            }
        }

        //卖出
        $update = [
            'status'   => 1,       //卖出
            'saletime' => time(),  //卖出时间
            'user_id'  => $this->auth->id,  //目前所属用户
            'is_show'  => 0,  //下架
        ];
        $rs = Db::name('uidsale')->where('id',$id)->update($update);
        if($rs === false){
            Db::rollback();
            $this->error('购买失败');
        }

        //自带id插入用户背包
        $nownum = Db::name('uidsale_bag')->where('user_id',$this->auth->id)->find();
        if(empty($nownum)){
            $data = [
                'user_id' => $this->auth->id,
                'u_id'    => $this->auth->u_id,
                'is_cool' => 0,
                'is_using' => 1,
            ];
            $rs1 = Db::name('uidsale_bag')->insertGetId($data);
            if(!$rs1){
                Db::rollback();
                $this->error('购买失败');
            }
        }
        //插入用户靓号
        $data = [
            'user_id' => $this->auth->id,
            'u_id'    => $info['new_id'],
            'is_cool' => 1,
        ];
        $rs2 = Db::name('uidsale_bag')->insertGetId($data);
        if(!$rs2){
            Db::rollback();
            $this->error('购买失败');
        }

        Db::commit();
        $this->success('操作成功',$id);
    }

    //用户当前靓号背包
    public function my_bag(){
        $list = Db::name('uidsale_bag')->where('user_id',$this->auth->id)->order('is_using desc,is_cool desc,id desc')->select();
        $this->success(1,$list);
    }

    //切换使用靓号
    public function use_newone(){
        if(!$this->apiLimit()){
            $this->error('操作频繁');
        }

        $id = input('id',0);
        if(!$id){
            $this->error();
        }

        Db::startTrans();

        $info = Db::name('uidsale_bag')->where('user_id',$this->auth->id)->where('id',$id)->find();
        if(empty($info)){
            Db::rollback();
            $this->error('操作有误,请刷新重试');
        }

        //全部卸下
        $rs = Db::name('uidsale_bag')->where('user_id',$this->auth->id)->update(['is_using'=>0]);
        if($rs === false){
            Db::rollback();
            $this->error('切换失败');
        }

        //此靓号切换
        $rs = Db::name('uidsale_bag')->where('user_id',$this->auth->id)->where('id',$id)->update(['is_using'=>1]);
        if($rs === false){
            Db::rollback();
            $this->error('切换失败');
        }

        //更新用户
        $rs = Db::name('user')->where('id',$this->auth->id)->update(['u_id'=>$info['u_id'],'is_cool'=>$info['is_cool']]);
        if($rs === false){
            Db::rollback();
            $this->error('切换失败');
        }

        Db::commit();
        $this->success();

    }


}