import logging
from logging.handlers import RotatingFileHandler
import os


# ----------------------------
# CONFIGURAREA LOGGING-ULUI
# ----------------------------

LOG_DIR = "/logs"
LOG_FILE = os.path.join(LOG_DIR, "app.log")

# Creează directorul de loguri dacă nu există
os.makedirs(LOG_DIR, exist_ok=True)

# Creare logger principal
logger = logging.getLogger("Nume Aplicatie")
logger.setLevel(logging.DEBUG)      # nivel global: DEBUG/INFO/WARNING/ERROR/CRITICAL


# ----------------------------
# FORMATUL MESAJE
# ----------------------------

formatter = logging.Formatter(
    fmt="%(asctime)s | %(levelname)-8s | %(filename)s:%(lineno)d | %(message)s",
    datefmt="%d-%m-%Y %H:%M:%S"
)


# ----------------------------
# HANDLER 1: LOG ÎN FIȘIER (ROTATIV)
# ----------------------------
file_handler = RotatingFileHandler(
    LOG_FILE,
    maxBytes=10 * 1024 * 1024,   # 10 MB
    backupCount=3,               # păstrează 3 versiuni vechi: app.log.1, app.log.2...
    encoding="utf-8"
)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.INFO)   # minim INFO în fișier


# ----------------------------
# HANDLER 2: LOG ÎN CONSOLĂ
# ----------------------------
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
console_handler.setLevel(logging.DEBUG)   # în consolă vezi mai multe informații


# ----------------------------
# ATAȘEAZĂ TOATE HANDLERELE
# ----------------------------
logger.addHandler(file_handler)
logger.addHandler(console_handler)


# ----------------------------
# EXEMPLU DE UTILIZARE
# ----------------------------
if __name__ == "__main__":
    logger.debug("Acesta este un mesaj DEBUG — apare doar în consolă.")
    logger.info("Sistemul a pornit cu succes.")
    logger.warning("Atenție, conexiunea la internet este instabilă!")
    logger.error("Eroare la conectarea la serverul MQTT!")
    logger.critical("CRITIC! S-a pierdut conexiunea cu modemul!")
