import sqlite3
import os
from logger import logger


class ConsentManager:
    def __init__(self, db_path="data/elysia.db"):
        self.db_path = db_path
        self.ensure_db()

    def ensure_db(self):
        os.makedirs(os.path.dirname(self.db_path), exist_ok=True)

        conn = sqlite3.connect(self.db_path)
        cursor = conn.cursor()
        cursor.execute("""CREATE TABLE IF NOT EXISTS consents (
            user_id INTEGER,
            guild_id INTEGER,
            consent INTEGER,
            PRIMARY KEY (user_id, guild_id)
            );""")
        conn.commit()
        conn.close()
        logger.info("Consent table ensured")

    async def request_consent(self, interaction):
        await interaction.response.send_message(
            "To use this feature, please consent to our data policy. "
            "Type `/consent` to agree, or `/decline` to disagree.",
            ephemeral=True
        )

    def give_consent(self, user_id, guild_id):
        conn = sqlite3.connect(self.db_path)
        cursor = conn.cursor()
        cursor.execute("""INSERT INTO consents (user_id, guild_id, consent)
                       VALUES (?, ?, 1) ON CONFLICT(user_id, guild_id)
                       DO UPDATE SET consent = 1;""",
                       (user_id, guild_id))
        conn.commit()
        conn.close()
        logger.info(f"User {user_id} consented to data storage.")

    def has_consent(self, user_id, guild_id):
        conn = sqlite3.connect(self.db_path)
        cursor = conn.cursor()
        cursor.execute("SELECT consent FROM consents WHERE user_id = ? AND guild_id = ?", (user_id, guild_id))
        row = cursor.fetchone()
        conn.close()
        return row and row[0] == 1  # Returns True if consent is given