import pyodbc
from config import Config

class DatabaseConnection:
    def __init__(self):
        self.connection = None
    
    def connect(self):
        try:
            connection_string = (
                f'Driver={{{Config.DATABASE_DRIVER}}};'
                f'Server={Config.DATABASE_SERVER};'
                f'Database={Config.DATABASE_NAME};'
                f'UID={Config.DATABASE_USER};'
                f'PWD={Config.DATABASE_PASSWORD};'
            )
            self.connection = pyodbc.connect(connection_string)
            self.connection.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
            self.connection.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
            return self.connection
        except pyodbc.Error as e:
            raise Exception(f"Database connection error: {str(e)}")
    
    def close(self):
        if self.connection:
            self.connection.close()
    
    def execute_query(self, query, params=None):
        try:
            cursor = self.connection.cursor()
            if params:
                cursor.execute(query, params)
            else:
                cursor.execute(query)
            return cursor
        except pyodbc.Error as e:
            raise Exception(f"Query execution error: {str(e)}")
    
    def fetch_all(self, cursor):
        columns = [description[0] for description in cursor.description]
        rows = cursor.fetchall()
        result = []
        for row in rows:
            result.append(dict(zip(columns, row)))
        return result
    
    def fetch_one(self, cursor):
        columns = [description[0] for description in cursor.description]
        row = cursor.fetchone()
        if row:
            return dict(zip(columns, row))
        return None

def get_db():
    db = DatabaseConnection()
    db.connect()
    return db
