import logging
from sqlmodel import Session
from argon2 import PasswordHasher

from rvpc.auth.utils import require_env
from rvpc.models.models import AppAdmin, Country, Location
from rvpc.db import engine

SUPER_PWD = require_env("SUPER_PWD")


def create_superadmin():
    try:
        ph = PasswordHasher()
        hash = ph.hash(SUPER_PWD)

        with Session(engine) as session:
            superadmin = AppAdmin(
                name="superadmin", password_hash=hash, role="superadmin"
            )

            session.add(superadmin)
            session.commit()
            session.refresh(superadmin)

    except Exception as e:
        logging.error(e)


def create_locations():
    with Session(engine) as session:
        superadmin = session.get(AppAdmin, "superadmin")
        if superadmin is None:
            raise (ValueError("No superadmin registered"))
        try:
            usa = Country(name="United States of America", code="US")
            session.add(usa)
            philadelphia = Location(
                name="Philadelphia",
                country=usa,
                lat=39.95,
                long=-75.16,
                assigned_admin=superadmin,
            )
            session.add(usa)
            session.add(philadelphia)
            session.commit()
            session.refresh(philadelphia)
        except Exception as e:
            logging.error(e)
        try:
            session.rollback()
            fr = Country(name="France", code="FR")
            paris = Location(
                name="Paris",
                country=fr,
                lat=48.86,
                long=2.34,
                assigned_admin=superadmin,
            )
            session.add(fr)
            session.add(paris)
            session.commit()
            session.refresh(paris)
        except Exception as e:
            logging.error(e)
