from sqlalchemy.orm import Session

from src.data.model.db.connection import get_sync_engine
from src.data.model.db.partner_agent import Partner
import csv

from src.data.synchronisation.utils import sha256_hash


def passwords_map():
    filename = "old_passwords.csv.csv"

    def read_csv():
        with open(filename, 'r') as file:
            for row in csv.DictReader(file, ['Number', 'Password']):
                yield row

    return {
        row['Number']: row['Password']
        for row in read_csv()
    }


engine = get_sync_engine()
session = Session(bind=engine)

partners = session.query(Partner).all()
numbers = set(map(lambda p: p.partner_num, partners))
passwords = passwords_map()

session.begin()

for partner in partners:
    if partner.partner_num in passwords.keys():
        partner.password_hash = sha256_hash(passwords[partner.partner_num])
        session.merge(instance=partner)

session.commit()
