/**
 * DailyNotificationErrorCodes.swift
 * 
 * Error code constants matching Android implementation
 * 
 * @author Matthew Raymer
 * @version 1.0.0
 */

import Foundation

/**
 * Error code constants matching Android error handling
 * 
 * These error codes must match Android's error response format:
 * {
 *   "error": "error_code",
 *   "message": "Human-readable error message"
 * }
 */
struct DailyNotificationErrorCodes {
    
    // MARK: - Permission Errors
    
    static let NOTIFICATIONS_DENIED = "notifications_denied"
    static let BACKGROUND_REFRESH_DISABLED = "background_refresh_disabled"
    static let PERMISSION_DENIED = "permission_denied"
    
    // MARK: - iOS-Specific Error Codes
    
    static let NOTIFICATION_PERMISSION_DENIED = "notification_permission_denied"
    static let PENDING_NOTIFICATION_LIMIT_EXCEEDED = "pending_notification_limit_exceeded"
    static let BG_TASK_NOT_REGISTERED = "bg_task_not_registered"
    static let BG_TASK_EXECUTION_FAILED = "bg_task_execution_failed"
    
    // MARK: - Configuration Errors
    
    static let INVALID_TIME_FORMAT = "invalid_time_format"
    static let INVALID_TIME_VALUES = "invalid_time_values"
    static let CONFIGURATION_FAILED = "configuration_failed"
    static let MISSING_REQUIRED_PARAMETER = "missing_required_parameter"
    
    // MARK: - Scheduling Errors
    
    static let SCHEDULING_FAILED = "scheduling_failed"
    static let TASK_SCHEDULING_FAILED = "task_scheduling_failed"
    static let NOTIFICATION_SCHEDULING_FAILED = "notification_scheduling_failed"
    
    // MARK: - Storage Errors
    
    static let STORAGE_ERROR = "storage_error"
    static let DATABASE_ERROR = "database_error"
    
    // MARK: - Network Errors (Phase 3)
    
    static let NETWORK_ERROR = "network_error"
    static let FETCH_FAILED = "fetch_failed"
    static let TIMEOUT = "timeout"
    
    // MARK: - System Errors
    
    static let PLUGIN_NOT_INITIALIZED = "plugin_not_initialized"
    static let INTERNAL_ERROR = "internal_error"
    static let SYSTEM_ERROR = "system_error"
    
    // MARK: - Helper Methods
    
    /**
     * Create error response dictionary
     * 
     * @param code Error code
     * @param message Human-readable error message
     * @return Error response dictionary
     */
    static func createErrorResponse(code: String, message: String) -> [String: Any] {
        return [
            "error": code,
            "message": message
        ]
    }
    
    /**
     * Create error response for missing parameter
     * 
     * @param parameter Parameter name
     * @return Error response dictionary
     */
    static func missingParameter(_ parameter: String) -> [String: Any] {
        return createErrorResponse(
            code: MISSING_REQUIRED_PARAMETER,
            message: "Missing required parameter: \(parameter)"
        )
    }
    
    /**
     * Create error response for invalid time format
     * 
     * @return Error response dictionary
     */
    static func invalidTimeFormat() -> [String: Any] {
        return createErrorResponse(
            code: INVALID_TIME_FORMAT,
            message: "Invalid time format. Use HH:mm"
        )
    }
    
    /**
     * Create error response for notifications denied
     * 
     * @return Error response dictionary
     */
    static func notificationsDenied() -> [String: Any] {
        return createErrorResponse(
            code: NOTIFICATIONS_DENIED,
            message: "Notification permissions denied"
        )
    }
    
    // MARK: - iOS-Specific Error Helpers
    
    /**
     * Create error response for notification permission denied
     * 
     * @return Error response dictionary
     */
    static func notificationPermissionDenied() -> [String: Any] {
        return createErrorResponse(
            code: NOTIFICATION_PERMISSION_DENIED,
            message: "Notification permission denied. User must grant permission in Settings."
        )
    }
    
    /**
     * Create error response for pending notification limit exceeded
     * 
     * @return Error response dictionary
     */
    static func pendingNotificationLimitExceeded() -> [String: Any] {
        return createErrorResponse(
            code: PENDING_NOTIFICATION_LIMIT_EXCEEDED,
            message: "Pending notification limit exceeded. iOS allows maximum 64 pending notifications."
        )
    }
    
    /**
     * Create error response for background task not registered
     * 
     * @return Error response dictionary
     */
    static func bgTaskNotRegistered() -> [String: Any] {
        return createErrorResponse(
            code: BG_TASK_NOT_REGISTERED,
            message: "Background task not registered. Ensure BGTaskScheduler is properly configured."
        )
    }
    
    /**
     * Create error response for background task execution failed
     * 
     * @return Error response dictionary
     */
    static func bgTaskExecutionFailed() -> [String: Any] {
        return createErrorResponse(
            code: BG_TASK_EXECUTION_FAILED,
            message: "Background task execution failed. Check Background App Refresh settings."
        )
    }
    
    /**
     * Create error response for background refresh disabled
     * 
     * @return Error response dictionary
     */
    static func backgroundRefreshDisabled() -> [String: Any] {
        return createErrorResponse(
            code: BACKGROUND_REFRESH_DISABLED,
            message: "Background App Refresh is disabled. Enable it in Settings > General > Background App Refresh."
        )
    }
}

