let mongodb = require("mongodb")
let mongodCt = mongodb.MongoClient
let ObjectId =  mongodb.ObjectId 
let open = ({dbName='student',collectionName,url="mongodb://127.0.0.1:27017"})=>{
    return new Promise((resolve,reject)=>{
        mongodCt.connect(url,{useUnifiedTopology: true},(err,client)=>{
            if(err){
                reject(err)
            }else{
                let db = client.db(dbName)
                let collection = db.collection(collectionName)
                resolve({collection,client})
            }
        })
    })
}
let findList = ({
    collectionName,
    dbName='student',
    _page,_limit,_sort,q
})=>{
    
    let rule = q ? {username:new RegExp(q,'g')} : {}   
    
    return new Promise((resolve,reject)=>{
        
        open({dbName,collectionName})
            .then(({collection,client})=>{
                
                collection.find(rule,{
                    skip:_page*_limit,
                    limit:_limit,
                    sort:{[_sort]:1} 
                }).toArray((err,result)=>{
                    if(!err && result.length>0){
                        resolve({err:0,data:result})
                    }else{
                        resolve({err:1,msg:"查无数据..."})
                    }
                    
                    client.close()
                })
            })
            .catch(err=>{ 
                reject({err:1,msg:"数据库链接失败...."})
            })
    })
}
let findDetail = ({
    dbName="student",
    collectionName,
    _id=null  
})=>{
    return new Promise((resolve,reject)=>{
        
        open({dbName,collectionName})
            .then(({collection,client})=>{
                
                if(_id.length === 24){
                    collection.find({_id:ObjectId(_id)}).toArray((err,data)=>{   
                        
                        if(!err && data.length>0){
                            resolve({err:0,data:data[0]}) 
                        }else{
                            resolve({err:1,msg:"查询不到数据...."})
                        }
                    })
                }else{
                    reject({err:1,msg:"id长度有误..."})
                }
            })
            .catch(err=>reject({err:1,msg:"链接数据库失败...."}))
    })
}
exports.open = open;
exports.findList = findList;  
exports.findDetail = findDetail;