import asyncio
import asyncpg
import config
import os

conn = None

class Install:
    dbi: asyncpg.Connection

    async def run(self):
        self.dbi = await asyncpg.connect(**config.DATABASE)
        args = os.sys.argv
        if "--force" in args:
            await self.drop_table()

        await self.create_table()

    async def drop_table(self):
        await self.dbi.execute("DROP TABLE IF EXISTS embedding_search_title_index;")
        print("Table dropped")

    async def create_table(self):
        await self.dbi.execute("""
        CREATE TABLE embedding_search_title_index (
            id SERIAL PRIMARY KEY,
            sha1 VARCHAR(40) NOT NULL UNIQUE,
            title TEXT NOT NULL,
            rev_id INT8 NOT NULL,
            embedding VECTOR(%d) NOT NULL
        );
        """ % (config.EMBEDDING_VECTOR_SIZE))
        await self.dbi.execute("CREATE INDEX embedding_search_title_index_embedding_idx ON embedding_search_title_index USING ivfflat (embedding vector_cosine_ops);")
        print("Table created")

if __name__ == "__main__":
    install = Install()

    loop = asyncio.get_event_loop()
    loop.run_until_complete(install.run())