<?php
namespace app\model;
/**
 * @property int id
 * @property int user_id
 * @property int digital_id
 * @property float usable_num
 * @property float frozen_num
 * @property string create_time
 * @property string update_time
 */
class UserDigitalModel extends BaseModel
{
    protected $name = 'user_digital';
    protected $pk = 'id';

    public static function getUserDigitalByUserId(array $data):array
    {
        if(!empty($data['trade_name'])){
            $digital_id=strtoupper($data['trade_name']);
        }else{
            $digital_id='USDT';
        }
        $info = self::where([
            'user_id'=>$data['user_id'],
            'digital_id'=>$digital_id
        ])->field('usable_num,frozen_num,digital_id as name')->find();
        if(empty($info)){
            return [
                'usable_num'=>0,
                'frozen_num'=>0,
                'name'=>$digital_id
            ];
        }
        return $info->toArray();
    }
    public static function getUserDigitalLock(int $user_id,string $digital_id='USDT'):array
    {
        $info = self::where([
            'user_id'=>$user_id,
            'digital_id'=>$digital_id
        ])->lock(true)->find();
        if(empty($info)){
            $info = new self;
            $info->user_id = $user_id;
            $info->digital_id = $digital_id;
            $info->usable_num = 0;
            $info->frozen_num = 0;
            $info->create_time = date('Y-m-d H:i:s');
            $info->update_time = date('Y-m-d H:i:s');
            $info->save();
        }
        return $info->toArray();
    }
    public static function getUserDigitalList(int $user_id):array
    {
        $list = self::where([
            'user_id'=>$user_id,
        ])->field('usable_num,frozen_num,digital_id as name')->select();
        if(empty($list)){
            return [];
        }
        $digital_list=DigitalListModel::getMarketList(['page'=>1,'page_size'=>100],$type=1);
        //print_r($digital_list);
        foreach ($list as $key=>$val){
            foreach ($digital_list['list'] as $item){
                if($item['name']==$val['name']){
                    $list[$key]['logo_link']=$item['logo_link'];
                }
            }
            if($val['name']!='USDT'){
                //买入成本
                $buy_info=DigitalTradeModel::getTradeOrderPrice($user_id,$val['name'],1);
                if($buy_info['order_num']>0){
                    $buy_price=($buy_info['order_money']/$buy_info['order_num']);//平均买入价
                    $list[$key]['buy_price']=$buy_price;
                }else{
                    $list[$key]['buy_price']=0;
                }
                //累计盈亏
                $sale_info=DigitalTradeModel::getTradeOrderPrice($user_id,$val['name'],2);
                if($sale_info['order_num']>0){
                    $sale_price=$sale_info['order_money']/$sale_info['order_num'];
                    $list[$key]['daily_num']=($sale_price-$buy_price)*$sale_info['order_num'];
                }else{
                    $list[$key]['daily_num']=0;
                }
            }else{
                $list[$key]['buy_price']=0;
                $list[$key]['daily_num']=0;
            }
        }

        //获取持仓成本
        //$buy_num=DigitalTradeModel::getTradeOrderBuyNum($user_id);
        //获取平仓累计盈亏
        //$daily_num=DigitalTradeModel::getTradeOrderDailyNum($user_id);
        $fee_num=DigitalTradeModel::getTradeOrderFee($user_id);
        return [
            'fee_num'=>$fee_num,//手续费
            'list'=>$list->toArray()
        ];
    }


    public static function InsertUserDigital(array $data)
    {
        $self = new self;
        $self->user_id = $data['user_id'];
        $self->digital_id = $data['digital_id'];
        $self->usable_num = $data['usable_num'];
        $self->frozen_num = $data['frozen_num'];
        $self->create_time = date('Y-m-d H:i:s');
        $self->save();
    }
    public static function updateUserDigital(array $update_data,array $where)
    {
        $update_data['update_time']=date('Y-m-d H:i:s');
        $res=self::where($where)->save($update_data);
        //echo  self::where($where)->getLastSql();
        return $res;
    }



}