# AUTOGENERATED! DO NOT EDIT! File to edit: ../../nbs/routes/page.ipynb.

# %% auto 0
__all__ = ['get_page_by_id', 'get_page_definition', 'get_page_access_list', 'get_pages_adminsummary', 'update_page_layout',
           'put_writelock', 'delete_writelock']

# %% ../../nbs/routes/page.ipynb 2
import httpx
import pandas as pd

import domolibrary.client.get_data as gd
import domolibrary.client.ResponseGetData as rgd
import domolibrary.client.DomoAuth as dmda


# %% ../../nbs/routes/page.ipynb 3
async def get_page_by_id(auth: dmda.DomoAuth, page_id: str,
                         debug_api: bool = False, 
                         session: httpx.AsyncClient = None,
                         include_layout: bool = False
                         ) -> rgd.ResponseGetData:
    url = f'https://{auth.domo_instance}.domo.com/api/content/v3/stacks/{page_id}/cards'
    
    if include_layout:
        url+='?includeV4PageLayouts=true'
    
    res = await gd.get_data(
        auth=auth,
        url=url,
        method='GET',
        debug_api=debug_api,
        session = session,
    )

    res.response


    return res

# %% ../../nbs/routes/page.ipynb 6
async def get_page_definition(auth, page_id, debug_api: bool = False, session: httpx.AsyncClient = None):

    url = f"https://{auth.domo_instance}.domo.com/api/content/v3/stacks/{page_id}/cards"

    params = {"includeV4PageLayouts": "true",
              "parts": "metadata,datasources,library,drillPathURNs,certification,owners,dateInfo,subscriptions,slicers"}

    res = await gd.get_data(url,
                            method='GET',
                            auth=auth,
                            session=session,
                            params=params, debug_api=debug_api)

    return res


# %% ../../nbs/routes/page.ipynb 9
async def get_page_access_list(auth,
                              page_id,
                              is_expand_users: bool = True,
                              debug_api: bool = False, session: httpx.AsyncClient = None):
    """retrieves accesslist, which users and groups a page is shared with"""

    url = f"https://{auth.domo_instance}.domo.com/api/content/v1/share/accesslist/page/{page_id}?expandUsers={is_expand_users}"

    res = await gd.get_data(url,
                            method='GET',
                            auth=auth,
                            session=session, debug_api=debug_api)

    # add group members to users response
    if is_expand_users:
        group_users = [user for group in res.response.get(
            'groups') for user in group.get('users')]
        users = res.response.get('users') + group_users
        res.response.update({'users': users})

    return res


# %% ../../nbs/routes/page.ipynb 12
async def get_pages_adminsummary(auth: dmda.DomoAuth,
                                 debug_loop: bool = False,
                                 debug_api : bool = False,
                                 limit = 35,
                                 session: httpx.AsyncClient = None):
    """retrieves all pages in instance user is able to see (but may not have been explicitly shared)"""

    url = f'https://{auth.domo_instance}.domo.com/api/content/v1/pages/adminsummary'

    offset_params = {
        'offset': 'skip',
        'limit': 'limit',
    }

    body = {"orderBy": "pageTitle", "ascending": True}

    def arr_fn(res) -> list[dict]:
        return res.response.get('pageAdminSummaries')

    res = await gd.looper(auth=auth,
                          method='POST',
                          url=url,
                          arr_fn=arr_fn,
                          offset_params=offset_params,
                          session=session,
                          loop_until_end=True,
                          body = body,
                          limit = limit, 
                          debug_loop=debug_loop, debug_api= debug_api)
    return res


# %% ../../nbs/routes/page.ipynb 14
async def update_page_layout(auth: dmda.DomoAuth, 
                            layout_id: str,
                             body: dict,
                         debug_api: bool = False):
    url = f'https://{auth.domo_instance}.domo.com/api/content/v4/pages/layouts/{layout_id}'


    res = await gd.get_data(
        auth=auth,
        url=url,
        body=body,
        method='PUT',
        debug_api=debug_api
    )

    if debug_api:
        print(res)

    return res

async def put_writelock(auth: dmda.DomoAuth, 
                        layout_id: str, 
                        user_id: str,
                        epoch_time: int,
                         debug_api: bool = False):
    url = f'https://{auth.domo_instance}.domo.com/api/content/v4/pages/layouts/{layout_id}/writelock'
    body= {
        "layoutId": layout_id,
        "lockHeartbeat": epoch_time,
        "lockTimestamp": epoch_time,
        "userId":user_id
    }
  
    res = await gd.get_data(
        auth=auth,
        url=url,
        body=body,
        method='PUT',
        debug_api=debug_api
    )

    if debug_api:
        print(res)

    return res

async def delete_writelock(auth: dmda.DomoAuth,
                           layout_id: str,
                         debug_api: bool = False):
    url = f'https://{auth.domo_instance}.domo.com/api/content/v4/pages/layouts/{layout_id}/writelock'
    res = await gd.get_data(
        auth=auth,
        url=url,
        method='DELETE',
        debug_api=debug_api
    )

    if debug_api:
        print(res)

    return res
