# -*- coding: utf-8 -*-
"""
Adtlas Activities App Configuration

This module configures the activities app for the Adtlas DAI Management System.
It handles activity tracking, logging, and audit trail functionality.

Features:
    - User activity tracking and monitoring
    - System event logging
    - Audit trail management
    - Activity analytics and reporting
    - Real-time activity feeds
    - Automated activity cleanup

Author: Adtlas Development Team
Version: 1.0.0
Last Updated: 2025-01-27
"""

from django.apps import AppConfig
from django.utils.translation import gettext_lazy as _


class ActivitiesConfig(AppConfig):
    """
    Configuration class for the activities app.
    
    This class defines the configuration for the activities application,
    including the app name, default auto field type, and initialization
    code for signals and default data.
    
    Attributes:
        default_auto_field (str): The default auto field type for models
        name (str): The full Python path to the app
        verbose_name (str): Human-readable name for the app
    """
    
    default_auto_field = "django.db.models.BigAutoField"
    name = "apps.activities"
    verbose_name = _("Activity Tracking & Audit Logs")
    
    def ready(self):
        """
        Initialize the app when Django starts.
        
        This method is called when the app is ready and can be used
        to register signals, perform initialization, or set up
        any app-specific configurations.
        
        Operations performed:
            - Register activity tracking signals
            - Set up periodic cleanup tasks
            - Initialize activity categories
            - Configure activity retention policies
        """
        # Import signals to register them
        try:
            from . import signals
            print("Activities app signals registered successfully")
        except ImportError as e:
            print(f"Warning: Could not import activities signals: {e}")
        
        # Initialize default activity categories
        self.create_default_activity_categories()
        
        # Set up periodic cleanup if Celery is available
        self.setup_periodic_cleanup()
    
    def create_default_activity_categories(self):
        """
        Create default activity categories if they don't exist.
        
        This method creates the basic activity categories needed for
        proper activity classification and filtering.
        
        Categories created:
            - Authentication (login, logout, password changes)
            - Content Management (create, update, delete content)
            - Campaign Management (campaign operations)
            - System Administration (user management, settings)
            - Analytics (report generation, data export)
            - Security (failed logins, permission changes)
        """
        try:
            from .models import ActivityCategory
            
            # Define default activity categories
            default_categories = [
                {
                    "name": "Authentication",
                    "code": "auth",
                    "description": "User authentication activities (login, logout, password changes)",
                    "color": "#007bff",
                    "icon": "fas fa-sign-in-alt",
                    "is_system": True,
                    "retention_days": 90
                },
                {
                    "name": "Content Management",
                    "code": "content",
                    "description": "Content creation, modification, and deletion activities",
                    "color": "#28a745",
                    "icon": "fas fa-file-alt",
                    "is_system": True,
                    "retention_days": 365
                },
                {
                    "name": "Campaign Management",
                    "code": "campaign",
                    "description": "Campaign creation, modification, and management activities",
                    "color": "#ffc107",
                    "icon": "fas fa-bullhorn",
                    "is_system": True,
                    "retention_days": 730
                },
                {
                    "name": "System Administration",
                    "code": "admin",
                    "description": "Administrative activities (user management, system settings)",
                    "color": "#dc3545",
                    "icon": "fas fa-cogs",
                    "is_system": True,
                    "retention_days": 1095
                },
                {
                    "name": "Analytics & Reporting",
                    "code": "analytics",
                    "description": "Analytics viewing, report generation, and data export activities",
                    "color": "#6f42c1",
                    "icon": "fas fa-chart-bar",
                    "is_system": True,
                    "retention_days": 180
                },
                {
                    "name": "Security Events",
                    "code": "security",
                    "description": "Security-related events (failed logins, permission changes)",
                    "color": "#fd7e14",
                    "icon": "fas fa-shield-alt",
                    "is_system": True,
                    "retention_days": 1095
                }
            ]
            
            # Create categories if they don't exist
            for category_data in default_categories:
                category, created = ActivityCategory.objects.get_or_create(
                    code=category_data["code"],
                    defaults=category_data
                )
                
                if created:
                    print(f"Created default activity category: {category.name}")
        
        except Exception as e:
            # Silently fail during migrations or if models aren't ready
            print(f"Warning: Could not create default activity categories: {e}")
    
    def setup_periodic_cleanup(self):
        """
        Set up periodic cleanup tasks for old activity records.
        
        This method configures Celery periodic tasks to automatically
        clean up old activity records based on retention policies.
        
        Tasks configured:
            - Daily cleanup of expired activity records
            - Weekly aggregation of activity statistics
            - Monthly archival of old activity data
        """
        try:
            from django_celery_beat.models import PeriodicTask, CrontabSchedule
            import json
            
            # Create daily cleanup task
            schedule, created = CrontabSchedule.objects.get_or_create(
                minute=0,
                hour=2,  # Run at 2 AM daily
                day_of_week='*',
                day_of_month='*',
                month_of_year='*',
            )
            
            PeriodicTask.objects.get_or_create(
                crontab=schedule,
                name='activities_daily_cleanup',
                task='apps.activities.tasks.cleanup_expired_activities',
                defaults={
                    'args': json.dumps([]),
                    'kwargs': json.dumps({}),
                    'enabled': True,
                }
            )
            
            print("Activities periodic cleanup tasks configured")
            
        except Exception as e:
            print(f"Warning: Could not setup periodic cleanup: {e}")