import asyncio
import json

import aiohttp

from src.database.queries import obtain_connection


async def main():
    conn = obtain_connection('your_path_here')
    with conn:
        curs = conn.cursor()
        res = curs.execute("""
            SELECT DISTINCT LbryClaimId claim_id FROM COMMENT; 
        """).fetchall()
        rows = [tuple(r)[0] for r in res]
        claims = {cid: {"comments": []} for cid in rows}

        comments = curs.execute("""
            SELECT channel_name, comment, comment_id, claim_id, timestamp 
            FROM COMMENTS_ON_CLAIMS
        """).fetchall()
        comments = [dict(r) for r in comments]
        while len(comments) > 0:
            c = comments.pop()
            cid = c.pop('claim_id')
            claims[cid]['comments'].append(c)

    lbrynet = 'http://localhost:5279'

    async with aiohttp.ClientSession() as client:
        i = 0
        for cid, data in claims.items():
            body = {
                'method': 'claim_search',
                'params': {
                    'claim_id': cid,
                    'no_totals': True
                }
            }

            async with client.post(lbrynet, json=body) as resp:
                res = (await resp.json())

            try:
                res = res['result']['items']
                print(f'{i} - ok')
                if res:
                    data.update({
                        'name': res[0]['name'],
                        'permanent_url': res[0]['permanent_url']
                    })
            except KeyError:
                print(f'{i}: broke')
                # await asyncio.sleep(1)
            i += 1
    return claims

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    claims = loop.run_until_complete(main())
    # print(claims)
    with open('comments_on_claims.json', 'w') as fp:
        json.dump(claims, fp, indent=2)