from django.core.management.base import BaseCommand
from django.conf import settings
import os
import sys
import resource


class Command(BaseCommand):
    help = 'Check upload limits and related settings'

    def handle(self, *args, **kwargs):
        self.check_upload_limits()

    def check_upload_limits(self):
        self.stdout.write("Django Settings for Upload:")
        self.stdout.write(f"FILE_UPLOAD_MAX_MEMORY_SIZE: {settings.FILE_UPLOAD_MAX_MEMORY_SIZE}")
        self.stdout.write(f"ALLOWED_FILE_TYPES: {getattr(settings, 'ALLOWED_FILE_TYPES', 'Not Defined')}")
        self.stdout.write(f"MEDIA_ROOT: {settings.MEDIA_ROOT}")
        self.stdout.write(f"MEDIA_URL: {settings.MEDIA_URL}")

        # Checking system environment variables that might affect file upload
        self.stdout.write("\nEnvironment Variables:")
        self.stdout.write(f"Max File Size (PHP): {os.getenv('upload_max_filesize', 'Not set in environment')}")
        self.stdout.write(f"Post Max Size (PHP): {os.getenv('post_max_size', 'Not set in environment')}")
        self.stdout.write(f"Memory Limit (PHP): {os.getenv('memory_limit', 'Not set in environment')}")

        self.stdout.write("\nSystem Limits:")
        self.stdout.write(f"Max Size for Open Files: {sys.getfilesystemencoding()}")  # General environment encoding
        
        soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
        self.stdout.write(f"Max Open Files (soft limit):{soft}")
        self.stdout.write(f"Max Open Files (hard limit):{hard}")

        # Display Django Rest Framework settings
        if hasattr(settings, 'REST_FRAMEWORK'):
            self.stdout.write("\nDjango REST Framework Upload Settings:")
            self.stdout.write(f"MAX_UPLOAD_SIZE: {settings.REST_FRAMEWORK.get('MAX_UPLOAD_SIZE', 'Not set')}")
            self.stdout.write(f"DEFAULT_PARSER_CLASSES: {settings.REST_FRAMEWORK.get('DEFAULT_PARSER_CLASSES', 'Not set')}")
        else:
            self.stdout.write("\nREST_FRAMEWORK settings are not defined in settings.py")
