import sqlite3

import configparser


class SQLiteDB:
    def __init__(self, db_name):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()

    def create_table(self, table_name, columns):
        columns_def = ', '.join([f"{col} {dtype}" for col, dtype in columns.items()])
        sql = f"CREATE TABLE IF NOT EXISTS {table_name} ({columns_def})"
        self.cursor.execute(sql)
        self.conn.commit()

    def insert(self, table_name, data):
        placeholders = ', '.join(['?' for _ in data])
        columns = ', '.join(data.keys())
        sql = f"INSERT INTO {table_name} ({columns}) VALUES ({placeholders})"
        try:
            self.cursor.execute(sql, tuple(data.values()))
            self.conn.commit()
        except Exception as e:
            print(e)

    def update(self, table_name, data, condition):
        set_clause = ', '.join([f"{col} = ?" for col in data.keys()])
        sql = f"UPDATE {table_name} SET {set_clause} WHERE {condition}"
        self.cursor.execute(sql, tuple(data.values()))
        self.conn.commit()

    def delete(self, table_name, condition):
        sql = f"DELETE FROM {table_name} WHERE {condition}"
        self.cursor.execute(sql)
        self.conn.commit()

    def query(self, table_name, columns='*', condition=None):
        sql = f"SELECT {columns} FROM {table_name}"
        if condition:
            sql += f" WHERE {condition}"
        self.cursor.execute(sql)
        return self.cursor.fetchall()

    def close(self):
        self.conn.close()


if __name__ == '__main__':
    config = configparser.ConfigParser()
    config.read('config.ini')
    db_path = config.get('excel_p', 'path') + 'example.db'
    db = SQLiteDB(db_path)
    print(db.query('sqlite_master'))
    db.close()