#!/usr/bin/env python
"""
Comprehensive fix for production static files issue
"""
import os
import sys
import django
from pathlib import Path
import subprocess

# Add the project directory to Python path
BASE_DIR = Path(__file__).resolve().parent
sys.path.append(str(BASE_DIR))

# Set Django settings
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'branch_system.settings_production')

# Setup Django
django.setup()

from django.core.management import execute_from_command_line
from django.conf import settings

def fix_production_static():
    """Fix production static files issue"""
    print("🔧 Fixing Production Static Files Issue...")
    print("=" * 60)
    
    # Step 1: Verify settings
    print("1. Checking production settings...")
    print(f"   DEBUG: {settings.DEBUG}")
    print(f"   STATIC_ROOT: {settings.STATIC_ROOT}")
    print(f"   STATIC_URL: {settings.STATIC_URL}")
    print(f"   STATICFILES_DIRS: {settings.STATICFILES_DIRS}")
    
    # Step 2: Collect static files
    print("\n2. Collecting static files...")
    try:
        execute_from_command_line(['manage.py', 'collectstatic', '--noinput', '--clear'])
        print("   ✅ Static files collected successfully")
    except Exception as e:
        print(f"   ❌ Error collecting static files: {e}")
        return False
    
    # Step 3: Verify static files
    print("\n3. Verifying static files...")
    staticfiles_dir = Path(settings.STATIC_ROOT)
    if staticfiles_dir.exists():
        print(f"   ✅ STATIC_ROOT directory exists: {staticfiles_dir}")
        
        # Check key files
        key_files = [
            'admin/css/base.css',
            'admin/js/core.js',
            'logo.jpeg',
            'js/login.js'
        ]
        
        for file_path in key_files:
            full_path = staticfiles_dir / file_path
            if full_path.exists():
                print(f"   ✅ {file_path} - Found")
            else:
                print(f"   ❌ {file_path} - Missing")
    else:
        print(f"   ❌ STATIC_ROOT directory missing: {staticfiles_dir}")
        return False
    
    # Step 4: Create test .htaccess
    print("\n4. Creating optimized .htaccess...")
    htaccess_content = """# Django .htaccess file for cPanel - Optimized for Static Files
# This file configures Apache to work with your Django application

# Enable rewrite engine
RewriteEngine On

# Handle static files - serve from staticfiles directory
RewriteCond %{REQUEST_URI} ^/static/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^static/(.*)$ staticfiles/$1 [L]

# Handle media files - serve directly if file exists
RewriteCond %{REQUEST_URI} ^/media/
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^media/(.*)$ media/$1 [L]

# Handle media files - fallback to Django if file doesn't exist
RewriteCond %{REQUEST_URI} ^/media/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^media/(.*)$ /passenger_wsgi.py/media/$1 [QSA,L]

# Redirect all other requests to Django
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /passenger_wsgi.py/$1 [QSA,L]

# Security headers
<IfModule mod_headers.c>
    Header always set X-Content-Type-Options nosniff
    Header always set X-Frame-Options DENY
    Header always set X-XSS-Protection "1; mode=block"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

# Compression
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

# Cache static files
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/ico "access plus 1 month"
    ExpiresByType image/icon "access plus 1 month"
    ExpiresByType text/plain "access plus 1 month"
    ExpiresByType application/pdf "access plus 1 month"
</IfModule>
"""
    
    try:
        with open('.htaccess', 'w') as f:
            f.write(htaccess_content)
        print("   ✅ .htaccess updated")
    except Exception as e:
        print(f"   ❌ Failed to update .htaccess: {e}")
    
    # Step 5: Create deployment instructions
    print("\n5. Creating deployment instructions...")
    instructions = f"""
📋 DEPLOYMENT INSTRUCTIONS
==========================

1. Upload these files to your cPanel:
   - branch_system/settings_production.py
   - .htaccess (the updated version)
   - staticfiles/ (entire directory)
   - media/ (entire directory)

2. Make sure your staticfiles directory is in the same directory as your passenger_wsgi.py file

3. Restart your web server in cPanel

4. Test your website:
   - Main site: https://ruralpoint.co.ke/
   - Admin: https://ruralpoint.co.ke/admin/
   - Test static file: https://ruralpoint.co.ke/static/admin/css/base.css

5. If static files still don't work, try this alternative .htaccess rule:
   RewriteRule ^static/(.*)$ /staticfiles/$1 [L]

6. Check cPanel error logs if issues persist

STATIC FILES LOCATION: {staticfiles_dir}
TOTAL STATIC FILES: {len(list(staticfiles_dir.rglob('*')))} files
"""
    
    try:
        with open('DEPLOYMENT_INSTRUCTIONS.txt', 'w') as f:
            f.write(instructions)
        print("   ✅ Deployment instructions created")
    except Exception as e:
        print(f"   ❌ Failed to create instructions: {e}")
    
    print("\n" + "=" * 60)
    print("✅ Production Static Files Fix Completed!")
    print("\n📋 Next Steps:")
    print("1. Upload the files as instructed above")
    print("2. Restart your web server")
    print("3. Test with DEBUG = False")
    print("4. Check if client names and images are now displaying correctly")
    
    return True

if __name__ == '__main__':
    fix_production_static()
