#    Copyright (C) 2025 James Brotosky, Brandon Wickline
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as published
#    by the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <https://www.gnu.org/licenses/>.


# TODO Continue implementing logger
# TODO Add input sanitation and CSV injection prevention
# TODO Continue OTP and Local approval rewrites
# TODO Explore pywin32
# TODO Fix Requirements.txt
# TODO Create Generic system_config.json for gitea

import logging
import os

import urllib3

from services.API import AirlockAPIWrapper
from services.security import getAPI
from TUI.TUI import run_Loxide
from utils.configmanager import get_system_value
from utils.setup import get_base_directory, setup
from utils.utils import irtang

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)


def main():
    irtang()
    # Determine  working directory, setup directory, configure logging, sent env, get API and URL if not already stored
    setup()
    base_dir = get_base_directory()
    logger = logging.getLogger(__name__)

    try:
        url = get_system_value("URL")
        username = os.getenv("USERNAME")

        if not url:
            raise ValueError("Missing URL in environment variables.")
        if not username:
            raise ValueError("Missing USERNAME in environment variables.")

        logger.debug(f"Retrieved URL: {url}")
        logger.debug(f"Retrieved Username: {username}")

    except ValueError as e:
        logger.error(f"Configuration error: {e}", exc_info=True)
        raise

    api_key = getAPI(username, "Loxide")
    if api_key is None:
        raise ValueError("API key for Loxide is missing.")

    api = AirlockAPIWrapper(
        base_url=str(url),
        api_key=api_key,
    )
    run_Loxide(api)


if __name__ == "__main__":
    main()
