"""Campaigns Management Module

This module provides management commands for the Adtlas Campaigns module:
- Campaign lifecycle management
- Budget monitoring and optimization
- Performance analytics and reporting
- Campaign automation and scheduling
- Data import/export operations
- Campaign compliance checking
- Bulk operations and maintenance

Available Commands:
    - optimize_campaigns: Optimize campaign performance and bidding
    - check_budgets: Monitor campaign budgets and spending
    - generate_reports: Generate campaign performance reports
    - sync_campaign_data: Synchronize campaign data with external platforms
    - cleanup_campaigns: Clean up old or inactive campaigns
    - validate_compliance: Check campaign compliance with policies
    - schedule_campaigns: Manage campaign scheduling and automation
    - export_campaign_data: Export campaign data for analysis
    - import_campaign_data: Import campaign data from external sources
    - campaign_health_check: Check overall campaign system health

Usage:
    python manage.py optimize_campaigns --help
    python manage.py check_budgets --alert-threshold 90
    python manage.py generate_reports --campaign-id CAMP123 --format json
    python manage.py cleanup_campaigns --days 30 --dry-run

Features:
    - Automated campaign optimization
    - Real-time budget monitoring
    - Comprehensive reporting
    - Data synchronization
    - Compliance validation
    - Bulk operations support
"""

# Management command registry
COMMANDS = {
    'optimize_campaigns': {
        'description': 'Optimize campaign performance and bidding strategies',
        'category': 'optimization',
        'frequency': 'hourly',
        'priority': 'high'
    },
    'check_budgets': {
        'description': 'Monitor campaign budgets and spending limits',
        'category': 'monitoring',
        'frequency': 'continuous',
        'priority': 'critical'
    },
    'generate_reports': {
        'description': 'Generate campaign performance reports',
        'category': 'reporting',
        'frequency': 'daily',
        'priority': 'medium'
    },
    'sync_campaign_data': {
        'description': 'Synchronize campaign data with external platforms',
        'category': 'integration',
        'frequency': 'hourly',
        'priority': 'high'
    },
    'cleanup_campaigns': {
        'description': 'Clean up old or inactive campaigns',
        'category': 'maintenance',
        'frequency': 'weekly',
        'priority': 'low'
    },
    'validate_compliance': {
        'description': 'Check campaign compliance with advertising policies',
        'category': 'compliance',
        'frequency': 'daily',
        'priority': 'high'
    },
    'schedule_campaigns': {
        'description': 'Manage campaign scheduling and automation',
        'category': 'automation',
        'frequency': 'continuous',
        'priority': 'medium'
    },
    'export_campaign_data': {
        'description': 'Export campaign data for external analysis',
        'category': 'data',
        'frequency': 'on-demand',
        'priority': 'low'
    },
    'import_campaign_data': {
        'description': 'Import campaign data from external sources',
        'category': 'data',
        'frequency': 'on-demand',
        'priority': 'medium'
    },
    'campaign_health_check': {
        'description': 'Check overall campaign system health',
        'category': 'monitoring',
        'frequency': 'hourly',
        'priority': 'high'
    }
}


def get_available_commands():
    """
    Get list of available management commands.
    
    Returns:
        Dictionary of available commands
    """
    return COMMANDS


def get_commands_by_category(category):
    """
    Get commands filtered by category.
    
    Args:
        category: Command category to filter by
        
    Returns:
        Dictionary of commands in the specified category
    """
    return {
        name: info for name, info in COMMANDS.items()
        if info.get('category') == category
    }


def get_commands_by_priority(priority):
    """
    Get commands filtered by priority.
    
    Args:
        priority: Command priority to filter by
        
    Returns:
        Dictionary of commands with the specified priority
    """
    return {
        name: info for name, info in COMMANDS.items()
        if info.get('priority') == priority
    }


def get_scheduled_commands():
    """
    Get commands that should run on a schedule.
    
    Returns:
        Dictionary of scheduled commands
    """
    return {
        name: info for name, info in COMMANDS.items()
        if info.get('frequency') != 'on-demand'
    }