from django.views.decorators.csrf import csrf_exempt
from django.http import JsonResponse
from django.conf import settings
from hope_faith_harvester.models import UexistFiles,UexistTargets,UexistFilesTargets,UexistEntriesMatched
from datetime import date
import os


@csrf_exempt
def file_upload_view(request):
    if request.method == 'POST':
        # Extract selected options from the POST data
        user_id = request.user.id
        selected_names = request.POST.getlist('names[]')
        print(selected_names, "selected_options")
        # Extract the list of uploaded files
        uploaded_files = request.FILES.getlist('files[]')  # Expecting multiple files
        print(uploaded_files, "uploaded_files")
        if not uploaded_files:
            return JsonResponse({'error': 'No files uploaded'}, status=400)

        # Define the path relative to the static directory
        # upload_dir = os.path.join(settings.BASE_DIR, 'static', 'uploaded_files')
        env = os.getenv('ENV') 
        upload_dir = f"/var/www/html/hope-faith-php-{env}/app/uexist"
        os.makedirs(upload_dir, exist_ok=True)  # Create directory if not exists

        file_urls = []  # List to hold the URLs of the uploaded files
        file_names = []

        # Save each file
        for uploaded_file in uploaded_files:
            file_path = os.path.join(upload_dir, uploaded_file.name)
            with open(file_path, 'wb+') as f:
                for chunk in uploaded_file.chunks():
                    f.write(chunk)
            print(f"File saved at: {uploaded_file.name}")
            file_url = f'static/uploaded_files/{uploaded_file.name}'
            file_urls.append(file_url)
            file_names.append(uploaded_file.name)
        
        files = [
            UexistFiles(file=file_name, date=date.today(), user_id=user_id)
            for file_name in file_names
        ]

        UexistFiles.objects.bulk_create(files)
        print("Data write in UexistFiles table successfully")
        latest_files = []

        for fname in file_names:
            latest_file = (
                UexistFiles.objects
                .filter(file=fname, user_id=user_id)
                .order_by('-file_id') 
                .first()
            )
            if latest_file:
                latest_files.append(latest_file)

        targets = UexistTargets.objects.filter(name__in=selected_names)

        file_target_entries = []
        for file in latest_files:
            for target in targets:
                file_target_entries.append(
                    UexistFilesTargets(file_id=file.file_id, target_id=target.target_id)
                )

        UexistFilesTargets.objects.bulk_create(file_target_entries)
        print("Data write in UexistFilesTargets table successfully")
        
        return JsonResponse({
            'message': 'Files uploaded successfully',
            'file_urls': file_urls,
            'selected_options': selected_names
        })
    
    return JsonResponse({'error': 'Invalid request'}, status=400)
