from datetime import datetime
from database import get_connection, is_postgres

class Currency:
    def __init__(self):
        self.ph = "%s" if is_postgres() else "?"

    def currency_to_dict(self, row):
        currency = {
                'id': row[0],
                'user_id': row[1],
                'name': row[2],
                'value': row[3],
                'created_at': row[4]
            }
        return currency
    
    def insert_currency(self, access_data):
        created_at = datetime.now().isoformat()
        with get_connection() as conn:
            cursor = conn.cursor()
            returning = "RETURNING id" if is_postgres() else ""
            query = f"""
                INSERT INTO currency (
                    user_id, name, value, created_at
                ) VALUES ({self.ph}, {self.ph}, {self.ph}, {self.ph}) {returning}
            """
            cursor.execute(
                query, 
                (
                    access_data['user_id'], 
                    access_data['name'], 
                    access_data['value'], 
                    created_at
                )
            )
            inserted_id = None
            if is_postgres():
                inserted_id = cursor.fetchone()[0]
            else:
                inserted_id = cursor.lastrowid
            if hasattr(conn, "commit"):
                conn.commit()
            return inserted_id
        
    def get_currency_user_id(self, user_id):
        with get_connection() as conn:
            cursor = conn.cursor()
            cursor.execute(f"SELECT * FROM currency WHERE user_id = {self.ph}", (user_id,))
            row = cursor.fetchone()
            return self.currency_to_dict(row) if row else None
        
    