# --- VIDESH CHALO: DATABASE PATH REPAIR v3.1 (Physical-Independent) ---
# Usage: python manage.py shell < image_cleanup.py
# PURPOSE: Strips suffixes from DB records even if physical files are already deleted.

import os
import re
from django.conf import settings

# 🛡️ Models Import
from jobs.models import NewsPost, Job, Profile, RecruiterProfile, Application
try:
    from blog.models import BlogPost
except ImportError:
    BlogPost = None

def repair_database_paths():
    print("\n" + "="*80)
    print("🚀 VIDESH CHALO: Database Path Surgical Repair v3.1")
    print("="*80)

    # Models aur unke specific image fields jinhe theek karna hai
    models_to_fix = [
        (NewsPost, 'image', 'news_images'),
        (Job, 'image', 'job_images'),
        (Profile, 'avatar', 'avatars'),
        (Profile, 'resume', 'resumes'),
        (RecruiterProfile, 'company_logo', 'company_logos'),
        (Application, 'resume', 'resumes'),
    ]
    if BlogPost:
        models_to_fix.append((BlogPost, 'featured_image', 'blog_images'))

    db_repaired_count = 0

    print("[1/1] Database mein se farji paths (suffixes) saaf kar rahe hain...")

    for model, field_name, folder in models_to_fix:
        # Saare records uthao jinme kuch bhi path likha hai
        instances = model.objects.exclude(**{f"{field_name}": ""})
        
        for inst in instances:
            field_file = getattr(inst, field_name)
            if not field_file: continue

            # DB mein jo naam hai (e.g. 'company_logos/Screenshot_13_aygKAWp.jpg')
            current_db_path = field_file.name 
            filename = os.path.basename(current_db_path)
            
            # Check pattern: _ + 7-9 characters + extension
            match = re.search(r'(_[a-zA-Z0-9]{7,9})\.[a-zA-Z0-9]+$', filename)
            
            if match:
                suffix = match.group(1)
                # Suffix ko mita kar clean name banayein
                clean_filename = filename.replace(suffix, '')
                clean_db_path = f"{folder}/{clean_filename}"
                
                # Direct Database Update (Bypassing model.save() to avoid storage conflicts)
                model.objects.filter(pk=inst.pk).update(**{field_name: clean_db_path})
                
                print(f"✅ DB REPAIRED: {filename} -> {clean_filename}")
                db_repaired_count += 1

    print("\n" + "="*80)
    print(f"✨ MISSION ACCOMPLISHED!")
    print(f"   - Admin Panel Records Fixed: {db_repaired_count}")
    print("="*80 + "\n")

# --- 🚀 EXECUTION (No Guards) ---
repair_database_paths()