from django.shortcuts import render,HttpResponse
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from ad_static.models import Banner, Admin, Service
from .forms import BannerForm, AdminForm, ServiceForm, ServiceImageForm
from django.db.models import Case, When, Value, IntegerField
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.auth import logout
from django.db import DataError
from functools import wraps




def admin_login_required(view_func):
    @wraps(view_func)
    def wrapper(request, *args, **kwargs):
        if 'admin_id' not in request.session:
            return redirect('admin_login')
        return view_func(request, *args, **kwargs)
    return wrapper


@admin_login_required
def home1(request):
    return render(request, 'backend/dashboard/home1.html')

@admin_login_required
def analytics(request):
    return render(request, 'backend/dashboard/analytics.html')

@admin_login_required
def users(request):
    return render(request, 'backend/dashboard/users.html')

@admin_login_required
def settings(request):
    return render(request, 'backend/dashboard/settings.html')

@admin_login_required
def banner(request):
    return render(request, 'backend/dashboard/banner.html')

@admin_login_required
def admin(request):
    return render(request, 'backend/dashboard/admin.html')



@admin_login_required
def banner_list(request):
    # banners = Banner.objects.all().order_by('-created_at')
    ordering = Case(
        When(type=1, then=Value(1)),
        When(type=2, then=Value(2)),
        When(type=3, then=Value(3)),
        When(type=4, then=Value(4)),
        When(type=5, then=Value(5)),
        When(type=6, then=Value(6)),
        output_field=IntegerField(),
    )
    banners = Banner.objects.filter(type__in=[1, 2, 3, 4, 5, 6]).order_by(ordering)[:6]
    form = BannerForm()
    
    type_name_map = {
        1: "Home",
        2: "About",
        3: "Services",
        4: "Projects",
        5: "Vaastu",
        6: "Contact",
    }

    for banner in banners:
        banner.type_name = type_name_map.get(banner.type, "Unknown")
        if banner.title and len(banner.title) > 30:
            banner.short_title = banner.title[:30] + "..."
        else:
            banner.short_title = banner.title

        if banner.subtitle and len(banner.subtitle) > 40:
            banner.short_subtitle = banner.subtitle[:40] + "..."
        else:
            banner.short_subtitle = banner.subtitle

    subtitle_error = ""
    if request.method == 'POST':
        title = request.POST.get('title', '')
        subtitle = request.POST.get('subtitle', '')
        content = request.POST.get('content', '')

        #  Validation logic
        if len(subtitle) > 255:
            subtitle_error = "Subtitle must be under 255 characters."
            form = BannerForm(request.POST, request.FILES)
            return render(request, 'backend/dashboard/banner.html', {
                'banners': banners,
                'form': form,
                'subtitle_error': subtitle_error  # Pass error to template
            })
        try:
        
            if 'banner_id' in request.POST:
                banner_id = request.POST.get('banner_id')
                banner = get_object_or_404(Banner, id=banner_id)
                
                banner.title = request.POST.get('title')
                banner.subtitle = request.POST.get('subtitle')
                banner.content = request.POST.get('content')
                

                
                # if request.FILES.get('image'):
                #     banner.image = request.FILES['image']
                if request.FILES.get('image'):
                    image = request.FILES['image']
                    valid_extensions = ['jpg', 'jpeg', 'png', 'gif']
                    ext = image.name.split('.')[-1].lower()
                    if image.size > 2 * 1024 * 1024:
                        messages.error(request, "Image file size must not exceed 2 MB.")
                        return redirect('banner_page')
                    if ext not in valid_extensions:
                        messages.error(request, "Only image files (JPG, JPEG, PNG, GIF) are allowed.")
                        return redirect('banner_page')
                
                    banner.image = image

                banner.save()
                messages.success(request, "Banner updated successfully!")
                return redirect('banner_page')
        
       
            else:
                form = BannerForm(request.POST, request.FILES)
                if form.is_valid():
                    form.save()
                    messages.success(request, "Banner added successfully!")
                    return redirect('banner_page')
        except DataError:
            messages.error(request, "Data too long. Please shorten your text.")
            return redirect('banner_page')

    form = BannerForm()
    return render(request, 'backend/dashboard/banner.html', {
        'banners': banners, 
        'form': form
    })

#admin

# ad_static/views.py




from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.messages import get_messages
from django.contrib.auth.hashers import make_password
from ad_static.models import Admin


# def admin_list(request):
#     admins = Admin.objects.all().order_by('-id')
#     password_error = None
#     contact_error = None

#     if request.method == 'POST':
#         admin_id = request.POST.get('admin_id')
#         name = request.POST.get('name')
#         email = request.POST.get('email')
#         password = request.POST.get('password')
#         confirm_password = request.POST.get('confirm_password')
#         contact_no = request.POST.get('contact_no')
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.contrib.auth.hashers import make_password
from .models import Admin
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.contrib.auth.models import User
from django.db import IntegrityError

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.contrib.auth.hashers import make_password
from .models import Admin

@admin_login_required
def admin_list(request):
    admins = Admin.objects.all().order_by('-id')

    # Default values
    context = {
        'admins': admins,
        'form_errors': {},
        'show_add_modal': False,
        'edit_admin_id': None,
        'old_form_data': {},
        'password_error': None
    }



    if request.method == 'POST':
        admin_id = request.POST.get('admin_id')
        name = request.POST.get('name', '').strip()
        email = request.POST.get('email', '').strip()
        contact_no = request.POST.get('contact_no', '').strip()
        password = request.POST.get('password', '').strip()
        confirm_password = request.POST.get('confirm_password', '').strip()

        form_errors = {}
        old_form_data = {
            'name': name,
            'email': email,
            'contact_no': contact_no,
        }

 

        if not name:
            form_errors['name'] = "Name is required."

        if not email:
            form_errors['email'] = "Email is required."
        elif Admin.objects.filter(email=email).exclude(id=admin_id).exists():
            form_errors['email'] = "Email already exists."

        if contact_no:
            if not contact_no.isdigit() or len(contact_no) != 10:
                form_errors['contact_no'] = "Enter a valid 10-digit number."

        # Password validation
        if not admin_id:  # Add admin
            if not password:
                form_errors['password'] = "Password is required."
            if not confirm_password:
                form_errors['confirm_password'] = "Confirm password is required."
            elif password != confirm_password:
                context['password_error'] = "Passwords do not match."
        else:  # Edit admin
            if password or confirm_password:
                if not password:
                    form_errors['password'] = "Password is required when confirming password."
                elif not confirm_password:
                    form_errors['confirm_password'] = "Confirm password is required."
                elif password != confirm_password:
                    context['password_error'] = "Passwords do not match."


        # IF ERRORS FOUND

        if form_errors or context['password_error']:
            context['form_errors'] = form_errors
            context['old_form_data'] = old_form_data

            if admin_id:
                context['edit_admin_id'] = admin_id
            else:
                context['show_add_modal'] = True

            # Return same page with errors (no redirect)
            return render(request, 'backend/dashboard/admin.html', context)

        # SAVE DATA

        if admin_id:
            admin = get_object_or_404(Admin, id=admin_id)
            admin.name = name
            admin.email = email
            admin.contact_no = contact_no if contact_no else None
            if password:
                admin.password = make_password(password)
            admin.save()
            messages.success(request, "Admin updated successfully.")
        else:
            Admin.objects.create(
                name=name,
                email=email,
                contact_no=contact_no if contact_no else None,
                password=make_password(password),
                status=True
            )
            messages.success(request, "Admin added successfully.")

        # Redirect clears old form data completely
        return redirect('admin_list')


    return render(request, 'backend/dashboard/admin.html', context)

   # --- Validate contact number ---
#         if not contact_no or len(contact_no) != 10 or not contact_no.isdigit():
#             contact_error = "Contact number must be exactly 10 digits."
#             return render(request, 'backend/dashboard/admin.html', {
#                 'admins': admins,
#                 'contact_error': contact_error,
#             })

#         # --- Validate passwords if provided ---
#         if password or confirm_password:
#             if password != confirm_password:
#                 password_error = "Passwords do not match."
#                 return render(request, 'backend/dashboard/admin.html', {
#                     'admins': admins,
#                     'password_error': password_error,
#                 })

#         if admin_id:  # --- Update existing admin ---
#             admin = get_object_or_404(Admin, id=admin_id)

#             # --- Check if email exists in another admin ---
#             if Admin.objects.filter(email=email).exclude(id=admin_id).exists():
#                 messages.error(request, "Email already exists for another admin!")
#                 return redirect('admin_list')

#             # --- Update fields ---
#             admin.name = name
#             admin.email = email
#             admin.contact_no = contact_no
#             # admin.status = True if status == "1" else False

#             # --- Update password if provided ---
#             if password:
#                 admin.password = make_password(password)  # Hash the password

#             admin.save()
#             messages.success(request, "Admin updated successfully.")
#             return redirect('admin_list')

#         else:  # --- Add new admin ---
#             if not name or not email or not password or not confirm_password:
#                 messages.error(request, "All fields are required.")
#                 return redirect('admin_list')

#             if Admin.objects.filter(email=email).exists():
#                 messages.error(request, "Email already exists.")
#                 return redirect('admin_list')

#             # --- Create new admin ---
#             admin = Admin(
#                 name=name,
#                 email=email,
#                 contact_no=contact_no,
#                 status=True if status == "1" else False,
#                 password=make_password(password)  # Hash the password
#             )
#             admin.save()
#             messages.success(request, "Admin added successfully.")
#             return redirect('admin_list')

#     return render(request, 'backend/dashboard/admin.html', {'admins': admins})


def admin_login(request):
    context = {}

    if request.method == 'POST':
        email = request.POST.get('email')
        password = request.POST.get('password')
        # Store email in context so input keeps its value
        context['email'] = email

        email_error = None
        password_error = None

        # --- Empty field validation ---
        if not email:
            email_error = "Email is required."
        if not password:
            password_error = "Password is required."

        if email_error or password_error:
            context['email_error'] = email_error
            context['password_error'] = password_error
            return render(request, 'backend/dashboard/login.html', context)


        try:
            admin_obj = Admin.objects.get(email=email)
        except Admin.DoesNotExist:
            messages.error(request, "Invalid email or password!")
            return redirect('admin_login')

        # --- Check if admin is active ---
        if not admin_obj.status:
            messages.error(request, "Your admin account is inactive. Contact support.")
            return redirect('admin_login')

        # --- Verify password ---
        if check_password(password, admin_obj.password):
            # Password is correct, login admin
            request.session['admin_id'] = admin_obj.id
            request.session['admin_name'] = admin_obj.name
            request.session['admin_email'] = admin_obj.email

            messages.success(request, "Login successful!")
            return redirect('dashboard')
        else:
            context['password_error'] = "Invalid password."
            return render(request, 'backend/dashboard/login.html', context)
            # messages.error(request, "Invalid email or password!")
            # return redirect('admin_login')

    return render(request, 'backend/dashboard/login.html', context)

@admin_login_required
def toggle_status(request, id):
    admin = get_object_or_404(Admin, id=id)
    admin.status = not admin.status
    admin.save()
    return redirect('admin_list')




    #         login(request, user)
    #         messages.success(request, "Login successful!") 
    #         return redirect('admin_list')
            
    #     else:
    #         context['login_error'] = "Invalid email/username or password!"
    #         return redirect('admin_login') 

    # return render(request, 'backend/dashboard/login.html', context)







#  Admin Register
def admin_register(request):
    if request.method == "POST":
        name = request.POST.get("name")
        email = request.POST.get("email")
        password = request.POST.get("password")
        confirm_password = request.POST.get("confirm_password")

        form_errors = {}
        old_data = {'name': name, 'email': email}

       
        if not name:
            form_errors['name'] = "Name is required."
        if not email:
            form_errors['email'] = "Email is required."
        if not password:
            form_errors['password'] = "Password is required."
        if not confirm_password:
            form_errors['confirm_password'] = "Confirm your password."
        elif password != confirm_password:
            form_errors['confirm_password'] = "Passwords do not match."

        if Admin.objects.filter(email=email).exists():
            form_errors['email'] = "Email already exists."

        if form_errors:
            return render(request, "backend/dashboard/register.html", {
                'form_errors': form_errors,
                'old': old_data
            })

       
        admin, created = Admin.objects.get_or_create(
            name=name,
            email=email,
            password=make_password(password),
            status=True
        )

        user, created = User.objects.get_or_create(
            username=email,
            email=email,
            password=make_password(password)
        )

        # token, created = Token.objects.get_or_create(user=user)
        # print("Token created:", token.key)

        messages.success(request, "Registration successful!")  
        return redirect("admin_login")

    return render(request, "backend/dashboard/register.html")

@admin_login_required
def admin_logout(request):
    if request.user.is_authenticated:
        print({
            "event": "admin_logout",
            "by_user": request.user.id
        })

    # logout(request)
    # messages.success(request, "Logged out successfully!")
    # return redirect('admin_login')
    logout(request)
    request.session.flush()
    messages.success(request, "Logged out successfully.")
    return redirect('admin_login')




from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.utils.text import slugify
from .models import Service

#  List all services
@admin_login_required
def service_list(request):
    services = Service.objects.all().order_by('-id')
    # print(" Total services:", services.count())
    return render(request, 'backend/dashboard/service.html', {'services': services})

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from django.utils.text import slugify
from .models import Service

# Add new service (All fields required)
@admin_login_required
def service_add(request):
    SERVICE_TYPE_CHOICES = [
        (1, 'Commercial'),
        (2, 'Retail'),
        (3, 'Residential'),
    ]

    if request.method == "POST":
        form_data = {
            'service_title': request.POST.get('service_title'),
            'description': request.POST.get('description'),
            'slug': request.POST.get('slug'),
            'detail_page_title': request.POST.get('detail_page_title'),
            'content': request.POST.get('content'),
            # 'service_type': request.POST.get('service_type'),
            'seo_title': request.POST.get('seo_title'),
            'seo_description': request.POST.get('seo_description'),
        }
        errors = {}

        # --- Text field validation ---
        for field, label in {
            'service_title': 'Service title',
            'description': 'Description',
            'slug': 'Slug',
            'detail_page_title': 'Detail page title',
            'content': 'Content',
            # 'service_type': 'Service type',
            'seo_title': 'SEO title',
            'seo_description': 'SEO description'
        }.items():
            if not form_data[field]:
                errors[field] = f"{label} is required."

        # --- Image field validation ---
        if 'featured_image' not in request.FILES:
            errors['featured_image'] = 'Featured image is required.'
        if 'image' not in request.FILES:
            errors['image'] = 'Main image is required.'

        # --- Return if errors ---
        if errors:
            return render(request, 'backend/dashboard/service_edit.html', {
                'form_data': form_data,
                'errors': errors,
                'SERVICE_TYPE_CHOICES': SERVICE_TYPE_CHOICES,
                'service': None,
            })

        # --- Save new service ---
        try:
            service = Service.objects.create(
                service_title=form_data['service_title'],
                description=form_data['description'],
                slug=form_data['slug'],
                detail_page_title=form_data['detail_page_title'],
                content=form_data['content'],
                # service_type=form_data['service_type'],
                seo_title=form_data['seo_title'],
                seo_description=form_data['seo_description'],
                featured_image=request.FILES['featured_image'],
                image=request.FILES['image']
            )
            messages.success(request, "Service added successfully!")
            return redirect('service_list')

        except Exception as e:
            errors['general'] = f"Error saving service: {str(e)}"
            return render(request, 'backend/dashboard/service_edit.html', {
                'form_data': form_data,
                'errors': errors,
                'SERVICE_TYPE_CHOICES': SERVICE_TYPE_CHOICES,
                'service': None,
            })

    # GET request — empty form
    return render(request, 'backend/dashboard/service_edit.html', {
        'form_data': {k: '' for k in [
            'service_title', 'description', 'slug', 'detail_page_title',
            'content', 'service_type', 'seo_title', 'seo_description'
        ]},
        'errors': {},
        'SERVICE_TYPE_CHOICES': SERVICE_TYPE_CHOICES,
        'service': None,
    })


# Edit existing service (All fields required)
@admin_login_required
def service_edit(request, id):
    service = get_object_or_404(Service, id=id)
    SERVICE_TYPE_CHOICES = Service.SERVICE_TYPE_CHOICES
    errors = {}

    if request.method == "POST":
        form_data = {
            'service_title': request.POST.get('service_title'),
            'description': request.POST.get('description'),
            'slug': request.POST.get('slug'),
            'detail_page_title': request.POST.get('detail_page_title'),
            'content': request.POST.get('content'),
            # 'service_type': request.POST.get('service_type'),
            'seo_title': request.POST.get('seo_title'),
            'seo_description': request.POST.get('seo_description'),
        }
        featured_image = request.FILES.get('featured_image')
        image = request.FILES.get('image')

        # --- Text field validation ---
        for field, label in {
            'service_title': 'Service title',
            'description': 'Description',
            'slug': 'Slug',
            'detail_page_title': 'Detail page title',
            'content': 'Content',
            # 'service_type': 'Service type',
            'seo_title': 'SEO title',
            'seo_description': 'SEO description'
        }.items():
            if not form_data[field]:
                errors[field] = f"{label} is required."

        # --- Image field validation ---
        if not featured_image and not service.featured_image:
            errors['featured_image'] = 'Featured image is required.'
        if not image and not service.image:
            errors['image'] = 'Main image is required.'

        # --- Slug uniqueness check ---
        slug = slugify(form_data['slug']) if form_data['slug'] else slugify(form_data['service_title'])
        if Service.objects.filter(slug=slug).exclude(id=service.id).exists():
            errors['slug'] = "Slug already exists for another service."

        # --- Return with errors ---
        if errors:
            return render(request, 'backend/dashboard/service_edit.html', {
                'service': service,
                'errors': errors,
                'form_data': form_data,
                'SERVICE_TYPE_CHOICES': SERVICE_TYPE_CHOICES,
            })

        # --- Save updates ---
        service.service_title = form_data['service_title']
        service.description = form_data['description']
        service.slug = slug
        service.detail_page_title = form_data['detail_page_title']
        service.content = form_data['content']
        # service.service_type = form_data['service_type']
        service.seo_title = form_data['seo_title']
        service.seo_description = form_data['seo_description']

        if featured_image:
            service.featured_image = featured_image
        if image:
            service.image = image

        service.save()
        messages.success(request, "Service updated successfully!")
        return redirect('service_list')

    # GET request — prefill form
    context = {
        'service': service,
        'SERVICE_TYPE_CHOICES': SERVICE_TYPE_CHOICES,
        'errors': {},
    }
    return render(request, 'backend/dashboard/service_edit.html', context)
    
# #  Add new service
# def service_add(request):
#     """Add new service - all fields required"""
#     SERVICE_TYPE_CHOICES = [
#         (1, 'Commercial'),
#         (2, 'Retail'),
#         (3, 'Residential'),
#     ]

#     if request.method == "POST":
       
#         form_data = {
#             'service_title': request.POST.get('service_title'),
#             'description': request.POST.get('description'),
#             'slug': request.POST.get('slug'),
#             'detail_page_title': request.POST.get('detail_page_title'),
#             'content': request.POST.get('content'),
#             'service_type': request.POST.get('service_type'),
#             'seo_title': request.POST.get('seo_title'),
#             'seo_description': request.POST.get('seo_description'),
#         }
#         errors = {}

#         # Text field validations - ALL REQUIRED FOR ADD
#         if not form_data['service_title']:
#             errors['service_title'] = 'Service title is required.'
#         if not form_data['description']:
#             errors['description'] = 'Description is required.'
#         if not form_data['slug']:
#             errors['slug'] = 'Slug is required.'
#         if not form_data['detail_page_title']:
#             errors['detail_page_title'] = 'Detail page title is required.'
#         if not form_data['content']:
#             errors['content'] = 'Content is required.'
#         if not form_data['service_type']:
#             errors['service_type'] = 'Service type is required.'
#         if not form_data['seo_title']:
#             errors['seo_title'] = 'SEO title is required.'
#         if not form_data['seo_description']:
#             errors['seo_description'] = 'SEO description is required.'

#         # Image field validations - ALL REQUIRED FOR ADD
#         if 'featured_image' not in request.FILES or not request.FILES['featured_image']:
#             errors['featured_image'] = 'Featured image is required.'
        
#         if 'image' not in request.FILES or not request.FILES['image']:
#             errors['image'] = 'Main image is required.'

       
#         if errors:
#             return render(request, 'backend/dashboard/service_edit.html', {
#                 'form_data': form_data,
#                 'errors': errors,
#                 'SERVICE_TYPE_CHOICES': SERVICE_TYPE_CHOICES,
#                 'service': None,
#                 'is_edit': False,
#             })

       
#         try:
#             service = Service.objects.create(
#                 service_title=form_data['service_title'],  
#                 description=form_data['description'],
#                 slug=form_data['slug'],
#                 detail_page_title=form_data['detail_page_title'],
#                 content=form_data['content'],
#                 service_type=form_data['service_type'],
#                 seo_title=form_data['seo_title'],
#                 seo_description=form_data['seo_description'],
#                 featured_image=request.FILES['featured_image'],
#                 image=request.FILES['image']
#             )
#             messages.success(request, "Service added successfully!")
#             return redirect('service_list')
            
#         except Exception as e:
#             errors['general'] = f'Error saving service: {str(e)}'
#             return render(request, 'backend/dashboard/service_edit.html', {
#                 'form_data': form_data,
#                 'errors': errors,
#                 'SERVICE_TYPE_CHOICES': SERVICE_TYPE_CHOICES,
#                 'service': None,
#                 'is_edit': False,
#             })

#     # If GET request (initial form) - provide empty form_data
#     return render(request, 'backend/dashboard/service_edit.html', {
#         'form_data': {
#             'service_title': '',
#             'description': '',
#             'slug': '',
#             'detail_page_title': '',
#             'content': '',
#             'service_type': '',
#             'seo_title': '',
#             'seo_description': '',
#         },
#         'errors': {},
#         'SERVICE_TYPE_CHOICES': SERVICE_TYPE_CHOICES,
#         'service': None,
#         'is_edit': False,
#     })

# # Edit existing service
# def service_edit(request, id):
#     service = get_object_or_404(Service, id=id)
#     title_error = None

#     if request.method == 'POST':
#         service_title = request.POST.get('service_title')
#         description = request.POST.get('description')
#         detail_page_title = request.POST.get('detail_page_title')
#         content = request.POST.get('content')
#         service_type = request.POST.get('service_type')
#         featured_image = request.FILES.get('featured_image')
#         image = request.FILES.get('image')
#         slug = request.POST.get('slug')  #
#         seo_title = request.POST.get('seo_title')
#         seo_description = request.POST.get('seo_description')


#         if not service_title:
#             title_error = "Service title is required."
#             return render(request, 'backend/dashboard/service_edit.html', {
#                 'service': service,
#                 'title_error': title_error
#             })

#         if slug:
#             slug = slugify(slug)
#         else:
#             slug = slugify(service_title)

#         # Unique slug check excluding this ID
#         if Service.objects.filter(slug=slug).exclude(id=service.id).exists():
#             messages.error(request, "Slug already exists for another service.")
#             return redirect('service_edit', id=service.id)

        

#         # Update fields
#         service.service_title = service_title
#         service.description = description
#         service.detail_page_title = detail_page_title
#         service.content = content
#         service.service_type = service_type
#         service.slug = slug
#         service.seo_title = seo_title
#         service.seo_description = seo_description

#         print(service.slug,"slug")

#         if image:
#             service.image = image
#         if featured_image:
#             service.featured_image = featured_image

#         service.save()
#         messages.success(request, "Service updated successfully.")
#         return redirect('service_list')
#     context = {
#     'service': service,
#     'SERVICE_TYPE_CHOICES': Service.SERVICE_TYPE_CHOICES
# }

#     return render(request, 'backend/dashboard/service_edit.html', context)


#  Toggle Active/Inactive
@admin_login_required
def toggle_service_status(request, id):
    service = get_object_or_404(Service, id=id)
    service.status = not service.status
    service.save()
    messages.success(request, f"Service status updated to {'Active' if service.status else 'Inactive'}.")
    return redirect('service_list')



from django.shortcuts import render, get_object_or_404, redirect
from .models import Service, ServiceImage

# List all images for a service
@admin_login_required
def service_image_list(request, service_id):
    service = get_object_or_404(Service, id=service_id)
    images = service.images.all()
    return render(request, 'backend/dashboard/service_sub_list.html', {
        'service': service,
        'images': images
    })
@admin_login_required
def service_image_add(request, service_id):
    service = get_object_or_404(Service, id=service_id)
    if request.method == 'POST':
        form = ServiceImageForm(request.POST, request.FILES)
        if form.is_valid():
            image = form.save(commit=False)
            image.service = service
            image.save()
            return redirect('service_image_list', service_id=service.id)
    else:
        form = ServiceImageForm()
    return render(request, 'backend/dashboard/service_img.html', {'form': form, 'service': service})

# # Add image
# def service_image_add(request, service_id):
#     service = get_object_or_404(Service, id=service_id)
#     if request.method == 'POST':
#         image_file = request.FILES.get('image')
#         long_description = request.POST.get('long_description', '')
#         if image_file:
#             ServiceImage.objects.create(service=service, image=image_file,long_description=long_description )
#         return redirect('service_image_list', service_id=service.id)
#     return render(request, 'backend/dashboard/service_img.html', {'service': service, 'action':'Add'})

# # Edit image
@admin_login_required
def service_image_edit(request, image_id):
    image_obj = get_object_or_404(ServiceImage, id=image_id)
    if request.method == 'POST':
        if 'image' in request.FILES:
            image_obj.image = request.FILES['image']
        image_obj.long_description = request.POST.get('long_description', '')
        image_obj.save()
        return redirect('service_image_list', service_id=image_obj.service.id)
    return render(request, 'backend/dashboard/service_img.html', {'service': image_obj.service, 'image': image_obj, 'action':'Edit'})

# Delete image
@admin_login_required
def service_image_delete(request, image_id):
    image_obj = get_object_or_404(ServiceImage, id=image_id)
    service_id = image_obj.service.id
    image_obj.delete()
    return redirect('service_image_list', service_id=service_id)



from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from .models import Gallery

#  List + Add
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib import messages
from .models import Gallery, Service,Enquiry

#  Gallery List Page
@admin_login_required
def gallery_list(request):
    
    galleries = Gallery.objects.all().order_by('-id')
    return render(request, "backend/dashboard/gallery_list.html", {
        "galleries": galleries
    })
    

@admin_login_required
def gallery_list1(request, service_id):
    service = get_object_or_404(Service, id=service_id)
    galleries = Gallery.objects.all().order_by('-id')
    return render(request, "backend/dashboard/gallery_list.html", {
        'service': service,
        "galleries": galleries
    })
# Add Gallery (Add/Edit same form)
@admin_login_required
def gallery_add(request, service_id):
    service = get_object_or_404(Service, id=service_id)
    
    if request.method == "POST":
        title = request.POST.get("title")
        service_title = request.POST.get('service_title')
        # description = request.POST.get('description')
        # content = request.POST.get('content')
        thumbnail_text = request.POST.get("thumbnail_text")
        # service_id = request.POST.get("service_id")
        status = request.POST.get("status")
        images = request.FILES.getlist("images")

        
        
    

        # Create gallery entries for each image
        for img in images:
            Gallery.objects.create(
                title=title,
                thumbnail_text=thumbnail_text,
                service=service,
                image=img,
                status=True if status == "1" else False
            )

        messages.success(request, "Image added successfully!")
        return redirect("gallery_list")

    return render(request, "backend/dashboard/gallery_add.html", {
        "services": service,
    })
@admin_login_required
def gallery_edit(request, id):
    gallery = get_object_or_404(Gallery, id=id)
    # services = Service.objects.all()

    if request.method == "POST":
        gallery.title = request.POST.get("title")
        gallery.thumbnail_text = request.POST.get("thumbnail_text")
        # gallery.service_id = request.POST.get("service_id")
        gallery.status = True if request.POST.get("status") == "1" else False

        if "images" in request.FILES:
            gallery.image = request.FILES["images"]

        gallery.save()
        messages.success(request, "Gallery updated successfully!")
        return redirect("gallery_list")

    return render(request, "backend/dashboard/gallery_add.html", {
        "gallery": gallery,
        # "services": services
    })


# Toggle Status
@admin_login_required
def gallery_toggle_status(request, id):
    gallery = get_object_or_404(Gallery, id=id)
    gallery.status = not gallery.status
    gallery.save()
    messages.success(request, "Status updated successfully!")
    return redirect("gallery_list")

from ad_static.models import Banner, Admin, Service, Gallery
from django.shortcuts import render

@admin_login_required
def dashboard(request):
    total_admins = Admin.objects.count()
    active_admins = Admin.objects.filter(status=True).count()
    inactive_admins = Admin.objects.filter(status=False).count()
    total_services = Service.objects.count()
    total_gallery_images = Gallery.objects.count()
    total_enquiry = Enquiry.objects.count()

    # print(" Dashboard counts:", total_admins, active_admins, inactive_admins, total_services, total_gallery_images)

    return render(request, 'backend/dashboard/home1.html', {
        'total_admins': total_admins,
        'active_admins': active_admins,
        'inactive_admins': inactive_admins,
        'total_services': total_services,
        'testimonial_count': 0,
        'total_gallery_images': total_gallery_images,
         'total_enquiry': total_enquiry,
    })


@admin_login_required
def enquiry_list(request):
    # You can restrict to admin/staff if needed
    # if not request.user.is_staff:
    #     return redirect('login')
    
    enquiries = Enquiry.objects.all().order_by('-created_at')  # newest first
    return render(request, 'backend/dashboard/enquiry.html', {'enquiries': enquiries})
# Toggle Status
@admin_login_required
def enquiry_toggle_status(request, id):
    enquiry = get_object_or_404(Enquiry, id=id)
    enquiry.status = not enquiry.status
    enquiry.save()
    messages.success(request, "Status updated successfully!")
    return redirect("enquiry_list")


from django.shortcuts import render, redirect, get_object_or_404
from .models import SEOSetting
from django.contrib import messages

@admin_login_required
def seo_list(request):
    seo_list = SEOSetting.objects.all().order_by('-updated_at')
    return render(request, 'backend/dashboard/seo_list.html', {'seo_list': seo_list})

@admin_login_required
def seo_add_edit(request, seo_id=None):
    seo_instance = None
    if seo_id:
        seo_instance = get_object_or_404(SEOSetting, id=seo_id)

    if request.method == "POST":
        seo_title = request.POST.get('seo_title')
        meta_keywords = request.POST.get('meta_keywords')
        meta_description = request.POST.get('meta_description')
        url_slug = request.POST.get('url_slug')
        image = request.FILES.get('image')

        if seo_instance:
            seo_instance.seo_title = seo_title
            seo_instance.meta_keywords = meta_keywords
            seo_instance.meta_description = meta_description
            seo_instance.url_slug = url_slug
            if image:
                seo_instance.image = image
            seo_instance.save()
            messages.success(request, "SEO settings updated successfully.")
        else:
            SEOSetting.objects.create(
                seo_title=seo_title,
                meta_keywords=meta_keywords,
                meta_description=meta_description,
                url_slug=url_slug,
                image=image
            )
            messages.success(request, "SEO settings added successfully.")

        return redirect('seo_list')

    return render(request, 'backend/dashboard/seo_form.html', {'seo': seo_instance})
