# (c) cavaliba.com  - data/api - group.py



import app_data.api.helper as helper
from app_data.group import Group
from app_home.log import DEBUG, log
from app_data.api.aaa import start_api
from django.views.decorators.csrf import csrf_exempt

# permission: p_group_read

#  ----------------------------------------------------------------------------
# /api/groups/
# /api/groups/<id>/
# /api/groups/<key>/
#  ----------------------------------------------------------------------------
@csrf_exempt
def group(request, id=None, key=None):

    aaa_api = start_api(request, permission="p_group_read")
    if not aaa_api["is_allowed"]:
        return helper.send_denied()

    log(DEBUG, aaa=aaa_api, app="api", view="group", action="GET", status="OK", data="")


    # single by id
    if id:
        grp = Group.from_id(id)
        if grp:
            reply = grp.to_dict()
            return helper.send_response(request, reply, 200)
        else:
            return helper.send_not_found()

    # single by keyname
    if key:
        grp = Group.from_keyname(keyname=key)
        if grp:
            reply = grp.to_dict()
            return helper.send_response(request, reply, 200)
        else:
            return helper.send_not_found()


    # multi list
    search = request.GET.get('search', '')
    page = helper.get_page(request)
    size = helper.get_size(request)
    first = (page - 1) * size
    last = first + size

    from app_data.models import DataInstance
    from django.db.models import Q

    qs = DataInstance.objects.filter(classname='group')
    if search:
        qs = qs.filter(Q(keyname__icontains=search) | Q(displayname__icontains=search))
    qs = qs[first:last]
    groups = [g for g in (Group.from_iobj(iobj=o) for o in qs) if g]

    reply = [grp.to_dict() for grp in groups]

    if len(reply) == 0:
        return helper.send_not_found()
    else:
        return helper.send_response(request, reply, 200)
