ROLE_NONE = 0
ROLE_USER = 100
ROLE_STAFF = 200

Router = require('koa-router')
router = new Router()

log = require('./log')
permissions = require('./permissions').permissions
errors = require('./errors')

UserService = require('./service/UserService')
PageHandle = require('./http/PageHandle')

auth = (authRequired, permission, isPage) ->
    return (next)->
        try
            unless authRequired
                yield next
            else
                if this.state.userId
                    if permission and not (this.state.userPermissions and permission.id in this.state.userPermissions)
                        log.user.debug 'expect permission', permission.id
                        return this.status = 403
                    else
                        yield next
                else
                    if isPage
                        this.redirect('/sign-in?src=' + this.url)
                    else
                        this.status = 401
        catch e
            if e instanceof errors.UserError
                this.status = 400
                if isPage
                    this.render('400', {message: e.message})
                else
                    this.body = e.describe()
            else
                log.system.error e
                if isPage
                    this.render('500', {message: e.message})
                else
                    this.status = 500

UserHandler = require('./http/UserHandler')


router.get '/', auth(false), PageHandle.toIndex

# =========================================
# 账户
# =========================================

# 顾客登录页面
router.get '/sign-in', auth(false), UserHandler.toSignIn
router.post '/sign-in', auth(false), UserHandler.gSignIn
router.post '/sign-out', auth(true), UserHandler.gSignOut
router.get '/ping', auth(true), UserHandler.gPing
router.post '/account-changed', UserHandler.pAccountChanged


exports.getRouter = -> router