# -*- coding: utf-8 -*-
"""
Adtlas Core Applications Package

This package contains all Django applications that make up the Adtlas platform.
Adtlas is a comprehensive digital advertising and campaign management system
that provides tools for advertisers, publishers, and content creators.

Core Applications:
    - accounts: User management, authentication, and authorization
    - activities: Activity tracking, logging, and audit trails
    - advertisers: Advertiser management and profiles
    - analytics: Analytics, reporting, and data visualization
    - authentication: Authentication backends and security
    - campaigns: Campaign management and optimization
    - channels: Channel management and content distribution
    - common: Shared utilities, models, and components
    - playlists: Playlist management and organization
    - vast: VAST (Video Ad Serving Template) implementation

Architecture:
    The Adtlas platform follows Django's app-based architecture where each
    application is responsible for a specific domain of functionality.
    Applications are designed to be:
    
    - Modular: Each app handles a specific business domain
    - Reusable: Common functionality is shared through the 'common' app
    - Scalable: Apps can be deployed independently if needed
    - Maintainable: Clear separation of concerns and responsibilities

Key Features:
    - Multi-tenant architecture support
    - Role-based access control (RBAC)
    - Comprehensive activity logging and audit trails
    - Real-time analytics and reporting
    - RESTful API with Django REST Framework
    - Asynchronous task processing with Celery
    - WebSocket support for real-time updates
    - Comprehensive test coverage
    - Docker containerization support
    - CI/CD pipeline integration

Dependencies:
    - Django 4.2+
    - Django REST Framework
    - Celery for async tasks
    - Redis for caching and message broker
    - PostgreSQL for primary database
    - Docker for containerization

Development Guidelines:
    1. Follow Django best practices and conventions
    2. Use type hints for better code documentation
    3. Write comprehensive tests for all functionality
    4. Document all public APIs and complex logic
    5. Use consistent naming conventions across apps
    6. Implement proper error handling and logging
    7. Follow security best practices
    8. Use database migrations for schema changes
    9. Implement proper caching strategies
    10. Monitor performance and optimize as needed

Security Considerations:
    - All user inputs are validated and sanitized
    - CSRF protection is enabled for all forms
    - SQL injection protection through ORM usage
    - XSS protection through template escaping
    - Secure authentication and session management
    - Rate limiting for API endpoints
    - Comprehensive activity logging for audit trails
    - Role-based permissions for all operations

Deployment:
    The platform supports multiple deployment strategies:
    - Traditional server deployment
    - Docker containerization
    - Kubernetes orchestration
    - Cloud platform deployment (AWS, GCP, Azure)
    - CI/CD pipeline integration

Monitoring and Logging:
    - Structured logging with appropriate log levels
    - Performance monitoring and metrics collection
    - Error tracking and alerting
    - Activity tracking for audit and compliance
    - Health checks and status monitoring

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

For more information, see the project documentation at:
https://docs.adtlas.com/
"""

# Version information
__version__ = '1.0.0'
__author__ = 'Adtlas Development Team'
__email__ = 'dev@adtlas.com'
__license__ = 'Proprietary'

# Application registry for dynamic discovery
APPS_REGISTRY = {
    'accounts': {
        'name': 'User Management',
        'description': 'User accounts, authentication, and authorization',
        'version': '1.0.0',
        'dependencies': ['common'],
        'api_endpoints': ['/api/accounts/', '/api/auth/'],
        'permissions': ['view_user', 'add_user', 'change_user', 'delete_user'],
    },
    'activities': {
        'name': 'Activity Tracking',
        'description': 'Activity logging, audit trails, and analytics',
        'version': '1.0.0',
        'dependencies': ['common', 'accounts'],
        'api_endpoints': ['/api/activities/', '/api/activity-categories/'],
        'permissions': ['view_activity', 'export_activity', 'view_activity_analytics'],
    },
    'advertisers': {
        'name': 'Advertiser Management',
        'description': 'Advertiser profiles and management',
        'version': '1.0.0',
        'dependencies': ['common', 'accounts'],
        'api_endpoints': ['/api/advertisers/'],
        'permissions': ['view_advertiser', 'add_advertiser', 'change_advertiser'],
    },
    'analytics': {
        'name': 'Analytics & Reporting',
        'description': 'Analytics, reporting, and data visualization',
        'version': '1.0.0',
        'dependencies': ['common', 'accounts', 'campaigns'],
        'api_endpoints': ['/api/analytics/', '/api/reports/'],
        'permissions': ['view_analytics', 'export_reports'],
    },
    'authentication': {
        'name': 'Authentication System',
        'description': 'Authentication backends and security',
        'version': '1.0.0',
        'dependencies': ['common'],
        'api_endpoints': ['/api/auth/'],
        'permissions': [],
    },
    'campaigns': {
        'name': 'Campaign Management',
        'description': 'Campaign creation, management, and optimization',
        'version': '1.0.0',
        'dependencies': ['common', 'accounts', 'advertisers'],
        'api_endpoints': ['/api/campaigns/'],
        'permissions': ['view_campaign', 'add_campaign', 'change_campaign'],
    },
    'channels': {
        'name': 'Channel Management',
        'description': 'Channel management and content distribution',
        'version': '1.0.0',
        'dependencies': ['common', 'accounts'],
        'api_endpoints': ['/api/channels/'],
        'permissions': ['view_channel', 'add_channel', 'change_channel'],
    },
    'common': {
        'name': 'Common Utilities',
        'description': 'Shared utilities, models, and components',
        'version': '1.0.0',
        'dependencies': [],
        'api_endpoints': ['/api/common/'],
        'permissions': [],
    },
    'playlists': {
        'name': 'Playlist Management',
        'description': 'Playlist creation and organization',
        'version': '1.0.0',
        'dependencies': ['common', 'accounts', 'channels'],
        'api_endpoints': ['/api/playlists/'],
        'permissions': ['view_playlist', 'add_playlist', 'change_playlist'],
    },
    'vast': {
        'name': 'VAST Implementation',
        'description': 'Video Ad Serving Template implementation',
        'version': '1.0.0',
        'dependencies': ['common', 'campaigns'],
        'api_endpoints': ['/api/vast/'],
        'permissions': ['view_vast', 'manage_vast'],
    },
}


def get_app_info(app_name: str) -> dict:
    """
    Get information about a specific app.
    
    Args:
        app_name (str): Name of the app
    
    Returns:
        dict: App information or empty dict if not found
    """
    return APPS_REGISTRY.get(app_name, {})


def get_all_apps() -> dict:
    """
    Get information about all registered apps.
    
    Returns:
        dict: Dictionary of all app information
    """
    return APPS_REGISTRY.copy()


def get_app_dependencies(app_name: str) -> list:
    """
    Get dependencies for a specific app.
    
    Args:
        app_name (str): Name of the app
    
    Returns:
        list: List of app dependencies
    """
    app_info = get_app_info(app_name)
    return app_info.get('dependencies', [])


def get_app_permissions(app_name: str) -> list:
    """
    Get permissions for a specific app.
    
    Args:
        app_name (str): Name of the app
    
    Returns:
        list: List of app permissions
    """
    app_info = get_app_info(app_name)
    return app_info.get('permissions', [])


def get_app_api_endpoints(app_name: str) -> list:
    """
    Get API endpoints for a specific app.
    
    Args:
        app_name (str): Name of the app
    
    Returns:
        list: List of API endpoints
    """
    app_info = get_app_info(app_name)
    return app_info.get('api_endpoints', [])