package mongo

import (
	"github.com/cuigh/swirl/model"
	"github.com/globalsign/mgo"
	"github.com/globalsign/mgo/bson"
)

func (d *Dao) PermGet(resType, resID string) (p *model.Perm, err error) {
	d.do(func(db *database) {
		p = &model.Perm{}
		q := bson.M{
			"res_type": resType,
			"res_id":   resID,
		}
		err = db.C("perm").Find(q).One(p)
		if err == mgo.ErrNotFound {
			p, err = nil, nil
		} else if err != nil {
			p = nil
		}
	})
	return
}

func (d *Dao) PermUpdate(perm *model.Perm) (err error) {
	d.do(func(db *database) {
		q := bson.M{
			"res_type": perm.ResType,
			"res_id":   perm.ResID,
		}
		update := bson.M{
			"$set": bson.M{
				"scope": perm.Scope,
				"roles": perm.Roles,
				"users": perm.Users,
			},
		}
		_, err = db.C("perm").Upsert(q, update)
	})
	return
}

func (d *Dao) PermDelete(resType, resID string) (err error) {
	d.do(func(db *database) {
		q := bson.M{
			"res_type": resType,
			"res_id":   resID,
		}
		err = db.C("perm").Remove(q)
	})
	return
}