"""
Business Metrics View for Prometheus Monitoring

This module provides custom business metrics for the Adtlas DAI Management System.
These metrics are scraped by Prometheus for monitoring business KPIs.
"""

from django.http import HttpResponse
from django.views.decorators.http import require_http_methods
from django.views.decorators.csrf import csrf_exempt
from django.db import connection
import time


@csrf_exempt
@require_http_methods(["GET"])
def business_metrics(request):
    """
    Custom business metrics endpoint for Prometheus scraping.
    Returns metrics in Prometheus text format.
    """
    metrics_data = []
    
    try:
        # Import models safely
        from apps.campaigns.models import Campaigns
        from apps.channels.models import Channels
        from apps.accounts.models import User
        
        # Total campaigns
        total_campaigns = Campaigns.objects.count()
        metrics_data.append(f'adtlas_campaigns_total {total_campaigns}')
        
        # Active campaigns (if there's an active field)
        try:
            active_campaigns = Campaigns.objects.filter(is_active=True).count()
            metrics_data.append(f'adtlas_active_campaigns_total {active_campaigns}')
        except:
            # If no is_active field, just report total campaigns
            metrics_data.append(f'adtlas_active_campaigns_total {total_campaigns}')
        
        # Total channels
        total_channels = Channels.objects.count()
        metrics_data.append(f'adtlas_channels_total {total_channels}')
        
        # Total users
        total_users = User.objects.count()
        metrics_data.append(f'adtlas_users_total {total_users}')
        
        # Active users (logged in last 24 hours)
        from django.utils import timezone
        from datetime import timedelta
        
        yesterday = timezone.now() - timedelta(days=1)
        active_users = User.objects.filter(last_login__gte=yesterday).count()
        metrics_data.append(f'adtlas_active_users_24h {active_users}')
        
        # Database connection health
        with connection.cursor() as cursor:
            cursor.execute("SELECT 1")
            db_healthy = 1
        metrics_data.append(f'adtlas_database_healthy {db_healthy}')
        
        # System uptime metric
        metrics_data.append(f'adtlas_system_up 1')
        
    except Exception as e:
        # If there's any error, report basic metrics
        metrics_data.append(f'adtlas_metrics_error 1')
        metrics_data.append(f'adtlas_system_up 1')
        # Add error as comment (not as metric to avoid Prometheus parsing issues)
        metrics_data.append(f'# Error retrieving business metrics: {str(e)}')
    
    # Add help text for metrics
    help_text = [
        '# HELP adtlas_campaigns_total Total number of campaigns',
        '# TYPE adtlas_campaigns_total gauge',
        '# HELP adtlas_active_campaigns_total Number of active campaigns',
        '# TYPE adtlas_active_campaigns_total gauge',
        '# HELP adtlas_channels_total Total number of channels',
        '# TYPE adtlas_channels_total gauge',
        '# HELP adtlas_users_total Total number of users',
        '# TYPE adtlas_users_total gauge',
        '# HELP adtlas_active_users_24h Users active in last 24 hours',
        '# TYPE adtlas_active_users_24h gauge',
        '# HELP adtlas_database_healthy Database health status',
        '# TYPE adtlas_database_healthy gauge',
        '# HELP adtlas_system_up System availability status',
        '# TYPE adtlas_system_up gauge',
    ]
    
    # Join help text and metrics
    response_content = '\n'.join(help_text + metrics_data) + '\n'
    
    return HttpResponse(
        response_content,
        content_type='text/plain; version=0.0.4; charset=utf-8'
    )
