from django.utils.translation import ugettext_lazy as _
from django import forms
from misago.acl.builder import BaseACL
from misago.forms import YesNoSwitch

def make_form(request, role, form):
    if not role.special and request.user.is_god():
        form.base_fields['can_use_mcp'] = forms.BooleanField(widget=YesNoSwitch, initial=False, required=False)
        form.base_fields['can_use_acp'] = forms.BooleanField(widget=YesNoSwitch, initial=False, required=False)
        form.layout.append((_("Special Access"),
                            (
                             ('can_use_mcp', {'label': _("Can use Moderator Control Panel"), 'help_text': _("Change this permission to yes to grant access to Mod CP for users with this role.")}),
                             ('can_use_acp', {'label': _("Can use Admin Control Panel"), 'help_text': _("Change this permission to yes to grant admin access for users with this role.")}),
                             )
                            ))


class SpecialACL(BaseACL):
    def is_admin(self):
        return self.acl['can_use_acp']

    def can_use_mcp(self):
        return self.acl['can_use_mcp']


def build(acl, roles):
    acl.special = SpecialACL()
    acl.special.acl['can_use_acp'] = False
    acl.special.acl['can_use_mcp'] = False

    for role in roles:
        try:
            if role['can_use_acp']:
                acl.special.acl['can_use_acp'] = True
            if 'can_use_mcp' in role and role['can_use_mcp']:
                acl.special.acl['can_use_mcp'] = True
        except KeyError:
            pass

    if acl.special.acl['can_use_acp'] or acl.special.acl['can_use_mcp']:
        acl.team = True
