<?php


namespace App\Services;

use App\Services\BaseService;
use App\Models\Coin;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;

/**
 * 平台支持的虚拟币
*/
class CoinService extends BaseService 
{
    /**
     * @description: 模型
     * @return {string}
     */    
    public static function model() :string
    {
        return Coin::class;
    }

    /**
     * @description: 枚举
     * @return {*}
     */    
    public static function enum() :string
    {
        return '';
    }

    /**
     * @description: 获取查询条件
     * @param {array} $search 查询内容
     * @return {array}
     */    
    public static function getWhere(array $search = []) :array
    {
        $where = [];
        if(isset($search['coin']) && !empty($search['coin'])){
            $where[] = ['coin', '=', $search['coin']];
        }
        if(isset($search['net']) && !empty($search['net'])){
            $where[] = ['net', '=', $search['net']];
        }
        if(isset($search['address']) && !empty($search['address'])){
            $where[] = ['address', '=', $search['address']];
        }
        if(isset($search['id']) && !empty($search['id'])){
            $where[] = ['id', '=', $search['id']];
        }
        return $where;
    }

     /**
     * @description: 查询单条数据
     * @param array $search
     * @return \App\Models\Coin|null
     */
    public static function findOne(array $search): ?Coin
    {
        return self::model()::where(self::getWhere($search))->first();
    }

    /**
     * @description: 查询所有数据
     * @param array $search
     * @return \Illuminate\Database\Eloquent\Collection
     */
    public static function findAll(array $search = [])
    {
        return self::model()::where(self::getWhere($search))->get();
    }

    /**
     * @description: 分页查询
     * @param array $search
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
     */
    public static function paginate(array $search = [])
    {
        $limit = isset($search['limit'])?$search['limit']:15;
        $paginator = self::model()::where(self::getWhere($search))->paginate($limit);
        return ['total' => $paginator->total(), 'data' => $paginator->items()];
    }

    
}