import json

from allmydata.web.common import TokenOnlyWebApi, get_arg, WebError


class MagicFolderWebApi(TokenOnlyWebApi):
    """
    I provide the web-based API for Magic Folder status etc.
    """

    def __init__(self, client):
        TokenOnlyWebApi.__init__(self, client)
        self.client = client

    def post_json(self, req):
        req.setHeader("content-type", "application/json")
        nick = get_arg(req, 'name', 'default')

        try:
            magic_folder = self.client._magic_folders[nick]
        except KeyError:
            raise WebError(
                "No such magic-folder '{}'".format(nick),
                404,
            )

        data = []
        for item in magic_folder.uploader.get_status():
            d = dict(
                path=item.relpath_u,
                status=item.status_history()[-1][0],
                kind='upload',
            )
            for (status, ts) in item.status_history():
                d[status + '_at'] = ts
            d['percent_done'] = item.progress.progress
            d['size'] = item.size
            data.append(d)

        for item in magic_folder.downloader.get_status():
            d = dict(
                path=item.relpath_u,
                status=item.status_history()[-1][0],
                kind='download',
            )
            for (status, ts) in item.status_history():
                d[status + '_at'] = ts
            d['percent_done'] = item.progress.progress
            d['size'] = item.size
            data.append(d)

        return json.dumps(data)
