# -*- coding: utf-8 -*-
"""
Health Check Module for Adtlas DAI Management System.

This module provides health check endpoints for monitoring the application
status, database connectivity, and other critical services.
"""

from django.db import connection
from django.core.cache import cache 
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_http_methods

from apps.campaigns.models import Campaign
from apps.advertisers.models import Advertiser
from apps.channels.models import Channel


def health_check(request):
    """
    Health check endpoint for Docker and monitoring systems.
    
    Checks:
    - Database connectivity
    - Redis connectivity
    - Basic application status
    
    Returns:
        JsonResponse: Health status information
    """
    health_status = {
        "status": "healthy",
        "service": "Adtlas DAI Management System",
        "checks": {}
    }
    
    # Check database connectivity
    try:
        with connection.cursor() as cursor:
            cursor.execute("SELECT 1")
        health_status["checks"]["database"] = "healthy"
    except Exception as e:
        health_status["status"] = "unhealthy"
        health_status["checks"]["database"] = f"unhealthy: {str(e)}"
    
    # Check Redis connectivity
    try:
        cache.set("health_check", "test", 30)
        cache.get("health_check")
        health_status["checks"]["redis"] = "healthy"
    except Exception as e:
        health_status["status"] = "unhealthy"
        health_status["checks"]["redis"] = f"unhealthy: {str(e)}"
    
    # Return appropriate HTTP status code
    status_code = 200 if health_status["status"] == "healthy" else 503
    
    return JsonResponse(health_status, status=status_code)


@login_required
@require_http_methods(["GET"])
def dashboard_stats_api(request):
    """
    API endpoint for dashboard statistics.
    
    Returns JSON data for dashboard widgets and charts.
    """
    stats = {
        "campaigns": {
            "total": Campaign.objects.count(),
            "active": Campaign.objects.filter(status="active").count(),
            "paused": Campaign.objects.filter(status="paused").count(),
            "completed": Campaign.objects.filter(status="completed").count(),
        },
        "advertisers": {
            "total": Advertiser.objects.count(),
            "active": Advertiser.objects.filter(is_active=True).count(),
        },
        "channels": {
            "total": Channel.objects.count(),
            "active": Channel.objects.filter(is_active=True).count(),
        }
    }
    
    return JsonResponse(stats)

