__version__ = "0.4.1-1"

import sys
import importlib
import compLib.LogstashLogging
import compLib.MetricsLogging
from compLib.Lock import Lock

apt_found = importlib.util.find_spec("apt") is not None
spi_found = importlib.util.find_spec("spidev") is not None


if apt_found:
    import apt

    try:
        __versions = apt.Cache()["python3-complib"].versions
        if len(__versions) != 1:
            print(f"Starting compLib! \033[91mVersion: {__version__} is outdated\033[0m\n"
                f"\033[92m[!] run the command 'sudo apt update && sudo apt install python3-complib' to install the newest version\033[0m")
        else:
            print(f"Starting compLib! \033[92mVersion: {__version__} is up to date\033[0m")
    except Exception as e:
        compLib.LogstashLogging.Logging.get_logger().error(f"error during checking apt package version -> {str(e)}")
        print(f"\033[91merror during checking apt package version -> {str(e)}\033[0m\n")
else:
    print("apt is not installed! This is for local development only!")
    
if Lock.is_locked():
    print("Another program using compLib is still running! Delete /root/complib.lock if this is an error. Exiting...")
    sys.exit()
else:
    Lock.lock()

if spi_found:
    from compLib.Spi import Spi
    from compLib.Reset import Reset
    from compLib.Encoder import Encoder
    from compLib.Motor import Motor
    import logging

    print(f"\033[34mInitializing chipmunk board...\033[0m")
    Reset.reset_bot()
    Spi.health_check()
    Spi.start_health_check_loop()
    Motor.start_robot_state_loop()
    Encoder.clear_all()
    print(f"\033[34mReady\033[0m\n")
else:
    print("spidev is not installed! This is for local development only!")
