from .database import DatabaseController
from models.users.user import User
from models.users.customer import Customer
from models.users.seller import Seller


class UserController(DatabaseController):
    FIELDS = ['id', 'username', 'password', 'firstName',
              'lastName', 'email', 'phone', 'role']

    def __init__(self):
        super().__init__()

    def create(self, user: User):
        params = [
            user.username,
            user.password,
            user.firstName,
            user.lastName,
            user.email,
            user.phone,
            user.role
        ]

        self._conn.execute(
            """INSERT INTO Users
            (username, password, first_name, last_name, email, phone, role)
            VALUES (?, ?, ?, ?, ?, ?, ?)""",
            params
        )
        self._conn.commit()

    def read(self, username: str) -> User | None:
        params = [
            username
        ]

        cursor = self._conn.execute(
            "SELECT * FROM Users WHERE Username = ?",
            params
        )
        row = cursor.fetchone()

        if row is not None:
            params = dict(zip(self.FIELDS, row))

            # Is user a seller
            type = Customer
            if row[7] == "Seller":
                type = Seller

            obj = self.new_instance(type, params)
            return obj

        return None

    def read_id(self, id: int) -> User | None:
        params = [
            id
        ]

        cursor = self._conn.execute(
            "SELECT * FROM Users WHERE id = ?",
            params
        )
        row = cursor.fetchone()

        if row is not None:
            params = dict(zip(self.FIELDS, row))

            # Is user a seller
            type = Customer
            if row[7] == "Seller":
                type = Seller

            obj = self.new_instance(type, params)
            return obj

        return None

    def update(self):
        print("Doing work")

    def delete(self):
        print("Doing work")
