#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
Простой HTTP-сервер для healthcheck Docker-контейнера.
Запускается параллельно с основным ботом и отвечает на запросы /health.
"""

import os
import http.server
import socketserver
import threading
import logging
from time import sleep

# Настройка логирования
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger('healthcheck')

# Порт для healthcheck
PORT = int(os.getenv('HEALTHCHECK_PORT', 8080))

class HealthCheckHandler(http.server.SimpleHTTPRequestHandler):
    """Обработчик для healthcheck запросов"""
    
    def do_GET(self):
        """Обработка GET-запросов"""
        if self.path == '/health':
            self.send_response(200)
            self.send_header('Content-Type', 'text/plain')
            self.end_headers()
            self.wfile.write(b"OK")
        else:
            self.send_response(404)
            self.send_header('Content-Type', 'text/plain')
            self.end_headers()
            self.wfile.write(b"Not Found")
    
    def log_message(self, format, *args):
        """Переопределяем метод логирования для вывода в наш logger"""
        logger.info("%s - - [%s] %s", self.address_string(), self.log_date_time_string(), format % args)

def run_health_server():
    """Запуск HTTP-сервера для healthcheck"""
    with socketserver.TCPServer(("", PORT), HealthCheckHandler) as httpd:
        logger.info(f"Starting healthcheck server on port {PORT}")
        httpd.serve_forever()

def start_health_server():
    """Запуск сервера в отдельном потоке"""
    # Даем основному приложению время на инициализацию
    sleep(5)
    
    # Запускаем HTTP-сервер в отдельном потоке
    thread = threading.Thread(target=run_health_server, daemon=True)
    thread.start()
    logger.info("Healthcheck server thread started")
    return thread

if __name__ == "__main__":
    # Этот код выполняется только если файл запускается напрямую, а не импортируется
    thread = start_health_server()
    try:
        # Держим основной поток живым
        while True:
            sleep(60)
    except KeyboardInterrupt:
        logger.info("Healthcheck server shutting down")
