"""Basic wizard for setting up microblog.pub configuration files."""
import os
import sys
from pathlib import Path
from typing import Any

import bcrypt
import tomli_w

from app.key import generate_key

_ROOT_DIR = Path().parent.parent.resolve()
_KEY_PATH = _ROOT_DIR / "data" / "key.pem"
_CONFIG_PATH = _ROOT_DIR / "data" / "profile.toml"


def setup_config_file(
    domain: str,
    username: str,
    name: str,
    summary: str,
    password: str,
) -> None:
    print("Generating microblog.pub config\n")
    if _KEY_PATH.exists():
        sys.exit(2)

    generate_key(_KEY_PATH)

    config_file = _CONFIG_PATH

    if config_file.exists():
        # Spit out the relative path for the "config artifacts"
        rconfig_file = "data/profile.toml"
        print(
            f"Existing setup detected, please delete {rconfig_file} "
            "before restarting the wizard"
        )
        sys.exit(2)

    dat: dict[str, Any] = {}
    dat["domain"] = domain
    dat["username"] = username
    dat["admin_password"] = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
    dat["name"] = name
    dat["summary"] = summary
    dat["https"] = True
    proto = "https"
    dat["icon_url"] = f'{proto}://{dat["domain"]}/static/nopic.png'
    dat["secret"] = os.urandom(16).hex()

    with config_file.open("w") as f:
        f.write(tomli_w.dumps(dat))

    print("Done")
    sys.exit(0)