import os
import shutil
import configparser
import logging
from datetime import datetime
from peewee import SqliteDatabase, PostgresqlDatabase
from rich.logging import RichHandler


# first things first: logging
logging.basicConfig(
    format='%(message)s',
    level=logging.INFO,
    datefmt='%H:%M:%S', # add %Y-%m-%d if needed
    handlers=[RichHandler()]
    )
logger = logging.getLogger(__name__)


# load config file containing constants and secrets
main_config = configparser.ConfigParser()
main_config.read("/app/containerdata/config/news_fetch.config.ini")
db_config = configparser.ConfigParser()
db_config.read("/app/containerdata/config/db.config.ini")


# DEBUG MODE:
if os.getenv("DEBUG", "false") == "true":
    logger.warning("Found 'DEBUG=true', setting up dummy databases")
    
    main_config["SLACK"]["archive_id"] = main_config["SLACK"]["debug_id"]
    main_config["MAIL"]["recipient"] = main_config["MAIL"]["sender"]
    main_config["DOWNLOADS"]["local_storage_path"] = main_config["DOWNLOADS"]["debug_storage_path"]

    download_db = SqliteDatabase(
        main_config["DATABASE"]["download_db_debug"],
        pragmas = {'journal_mode': 'wal'} # mutliple threads can read at once
    )

# PRODUCTION MODE:
else:
    logger.warning("Found 'DEBUG=false' and running on production databases, I hope you know what you're doing...")
    
    cred = db_config["DATABASE"]
    download_db = PostgresqlDatabase(
        cred["db_name"], user=cred["user_name"], password=cred["password"], host="vpn", port=5432
    )
    # TODO Reimplement backup/printout
    # logger.info("Backing up databases")
    # backup_dst = main_config["DATABASE"]["db_backup"]
    # today = datetime.today().strftime("%Y.%m.%d")
    # shutil.copyfile(
    #     os.path.join(db_base_path, main_config["DATABASE"]["chat_db_name"]), 
    #     os.path.join(backup_dst, today + "." + main_config["DATABASE"]["chat_db_name"]), 
    #     )
    # shutil.copyfile(
    #     os.path.join(db_base_path, main_config["DATABASE"]["download_db_name"]), 
    #     os.path.join(backup_dst, today + "." + main_config["DATABASE"]["download_db_name"]), 
    #     )



from utils_storage import models

# Set up the database
models.set_db(download_db)
