from dataclasses import dataclass, field, asdict
import json
from pathlib import Path
import csv
from typing import Optional


@dataclass
class User:
    lastname: str
    firstname: str
    username: str
    password: str = field(repr=False)
    title: str
    admin: bool
    write: bool
    department: list
    costcenter: list


class Auth:
    def __init__(self) -> None:
        with open(Path(__file__).parent.parent.joinpath('config', 'users.csv'), 'r') as frh:
            csv_reader = csv.DictReader(frh, delimiter=';')
            self.users = dict([(row['username'], self.parse_users_csv(row)) for row in csv_reader])

    def parse_users_csv(self, row: dict) -> User:
        row['admin'] = (row['admin'] == 'True')
        row['write'] = (row['write'] == 'True')
        row['department'] = json.loads(row['department'])
        row['costcenter'] = json.loads(row['costcenter'])
        return User(**row)

    def get_user(self, username, password) -> Optional[dict]:
        if username not in self.users:
            return None
        # if self.users[username].password != password:
        #     return None
        if username != password:
            # nur zu Testzwecken
            return None
        
        res = asdict(self.users[username])
        del(res['password'])
        return res


if __name__ == '__main__':
    print(Auth().get_user('TKP', 'G9zHjA'))