package com.example.godeye.managers

import android.Manifest
import android.content.Context
import android.content.pm.PackageManager
import androidx.core.content.ContextCompat
import com.example.godeye.utils.Logger

/**
 * Менеджер для управления разрешениями приложения
 */
class PermissionManager(private val context: Context) {

    companion object {
        val REQUIRED_PERMISSIONS = arrayOf(
            Manifest.permission.CAMERA,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.INTERNET,
            Manifest.permission.ACCESS_NETWORK_STATE,
            Manifest.permission.WAKE_LOCK,
            Manifest.permission.FOREGROUND_SERVICE,
            Manifest.permission.POST_NOTIFICATIONS
        )

        val CAMERA_PERMISSIONS = arrayOf(
            Manifest.permission.CAMERA,
            Manifest.permission.RECORD_AUDIO
        )
    }

    /**
     * Проверить, есть ли все необходимые разрешения
     */
    fun hasAllRequiredPermissions(): Boolean {
        return REQUIRED_PERMISSIONS.all { permission ->
            ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
        }
    }

    /**
     * Проверить разрешения для камеры
     */
    fun hasCameraPermissions(): Boolean {
        return CAMERA_PERMISSIONS.all { permission ->
            ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
        }
    }

    /**
     * Проверить конкретное разрешение
     */
    fun hasPermission(permission: String): Boolean {
        return ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
    }

    /**
     * Получить список отсутствующих разрешений
     */
    fun getMissingPermissions(): List<String> {
        return REQUIRED_PERMISSIONS.filter { permission ->
            ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED
        }
    }

    /**
     * Получить список отсутствующих разрешений для камеры
     */
    fun getMissingCameraPermissions(): List<String> {
        return CAMERA_PERMISSIONS.filter { permission ->
            ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED
        }
    }

    /**
     * Проверить критические разрешения для основной функциональности
     */
    fun hasCriticalPermissions(): Boolean {
        val criticalPermissions = arrayOf(
            Manifest.permission.CAMERA,
            Manifest.permission.RECORD_AUDIO,
            Manifest.permission.INTERNET
        )

        return criticalPermissions.all { permission ->
            ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED
        }
    }

    /**
     * Логирование состояния разрешений
     */
    fun logPermissionsStatus() {
        Logger.d("=== Permission Status ===")
        REQUIRED_PERMISSIONS.forEach { permission ->
            val granted = hasPermission(permission)
            Logger.d("$permission: ${if (granted) "GRANTED" else "DENIED"}")
        }
        Logger.d("All required permissions: ${hasAllRequiredPermissions()}")
        Logger.d("Camera permissions: ${hasCameraPermissions()}")
        Logger.d("Critical permissions: ${hasCriticalPermissions()}")
    }
}
