import sqlite3
import os

from expiringdict import ExpiringDict

DEFAULT_DB_PATH = "db/suggestions.db"


class Database:
    def __init__(self, db_path=DEFAULT_DB_PATH, max_cache_len=1000, max_cache_age=30):
        # Legacy check - this can be removed at some point in the near future
        if os.path.isfile("suggestions.db") and not os.path.isfile("db/suggestions.db"):
            print("Migrating %s to %s" % ("suggestions.db", "db/suggestions.db"))
            try:
                os.rename("suggestions.db", "db/suggestions.db")
            except Exception as e:
                print(str(e))

        self.db_path = db_path
        self.cache = ExpiringDict(max_len=max_cache_len, max_age_seconds=max_cache_age)

        # Make sure to do data synchronization on writes!
        self.c = sqlite3.connect(db_path, check_same_thread=False)
        self.c.execute(
            """CREATE TABLE IF NOT EXISTS suggestions (
            "q"	TEXT NOT NULL,
            "s"	TEXT NOT NULL,
            "source"	TEXT NOT NULL,
            "target"	TEXT NOT NULL
        );"""
        )

    def add(self, q, s, source, target):
        self.c.execute(
            "INSERT INTO suggestions (q, s, source, target) VALUES (?, ?, ?, ?)",
            (q, s, source, target),
        )
        self.c.commit()
        return True