from django.shortcuts import render, redirect
from django.views import View
from django.views.generic import ListView, FormView, CreateView
from django.urls import reverse_lazy
from django.contrib import messages
from django.core.mail import send_mail
from django.conf import settings
from django.views.generic.edit import FormView
from django.utils import timezone
from .forms import ContactUsForm
from .models import ContactUs

# ایمپورت صحیح ContactUs از مدل‌های همین اپ
from .models import ContactUs

# ایمپورت صحیح UserProfile از account_module
from account_module.models import UserProfile

# ایمپورت فرم‌ها
from .forms import ContactUsForm, ContactUsModelForm # هر دو فرم را ایمپورت کنید اگر لازم است

# SiteSetting اگر در سایت شما وجود دارد و لازم است
from site_module.models import SiteSetting # اگر SiteSetting استفاده می‌شود، آن را نگه دارید


# تابع کمکی برای ذخیره فایل (اگر در CreateProfileView استفاده می‌شود)
def store_file(file):
    # این تابع را فقط در صورتی استفاده کنید که واقعاً نیاز به ذخیره فایل روی دیسک دارید
    # و به آن به درستی در View ارجاع می‌دهید.
    # در غیر این صورت، نیازی به آن نیست یا باید مسیر ذخیره‌سازی را دقیق‌تر مدیریت کنید.
    with open('temp/image.jpg', 'wb+') as dest: # 'wb+' برای بازنویسی و باینری
        for chunk in file.chunks():
            dest.write(chunk)


# View برای صفحه تماس با ما



class ContactUsView(FormView):
    template_name = 'contact_module/contact_us_page.html'
    form_class = ContactUsForm
    success_url = reverse_lazy('contact_us_page')

    def form_valid(self, form):
        user_ip = self.request.META.get('REMOTE_ADDR')

        # جلوگیری از ارسال پشت سرهم پیام
        last_message = ContactUs.objects.filter(user_ip=user_ip).order_by('-created_at').first()

        if last_message:
            time_diff = (timezone.now() - last_message.created_at).total_seconds()
            if time_diff < 30:
                messages.error(self.request, "لطفاً چند لحظه دیگر دوباره تلاش کنید.")
                return self.form_invalid(form)

        # ذخیره پیام
        message_obj = form.save(commit=False)
        message_obj.user_ip = user_ip
        message_obj.save()

        # تعیین لیست دریافت کننده ایمیل
        if hasattr(settings, "ADMINS") and settings.ADMINS:
            recipients = [admin[1] for admin in settings.ADMINS]
        else:
            recipients = [settings.DEFAULT_FROM_EMAIL]

        # ارسال ایمیل
        try:
            send_mail(
                subject=f"پیام جدید از {message_obj.full_name} ({message_obj.subject})",
                message=message_obj.message,
                from_email=settings.DEFAULT_FROM_EMAIL,
                recipient_list=recipients,
                fail_silently=False,
            )
        except Exception:
            messages.warning(self.request, "پیام ذخیره شد اما ارسال ایمیل با مشکل مواجه شد.")

        messages.success(self.request, "پیام شما با موفقیت ارسال شد. با تشکر از شما.")

        return super().form_valid(form)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context


# View برای ساخت پروفایل جدید
class CreateProfileView(CreateView):
    template_name = 'contact_module/create_profile_page.html'
    model = UserProfile
    fields = ['phone', 'address'] # فیلدهایی که کاربر باید پر کند (user به صورت خودکار از request گرفته می‌شود)
    success_url = reverse_lazy('profile_list') # به یک URL مناسب بعد از ساخت پروفایل تغییر دهید

    def form_valid(self, form):
        # بررسی می‌کنیم که آیا کاربر قبلا پروفایل دارد
        if hasattr(self.request.user, 'userprofile'):
            messages.warning(self.request, "شما قبلاً یک پروفایل ساخته‌اید.")
            return redirect(self.success_url) # یا به صفحه ویرایش پروفایل

        profile = form.save(commit=False)
        profile.user = self.request.user # پروفایل را به کاربر لاگین شده متصل می‌کنیم
        profile.save()
        messages.success(self.request, "پروفایل شما با موفقیت ایجاد شد.")
        return super().form_valid(form)

    # اگر کاربر لاگین نکرده باشد، به صفحه لاگین هدایت شود
    # from django.contrib.auth.mixins import LoginRequiredMixin
    # class CreateProfileView(LoginRequiredMixin, CreateView):
    #     login_url = '/login/' # مسیر صفحه لاگین شما

# View برای لیست پروفایل‌ها
class ProfileView(ListView):
    model = UserProfile
    template_name = 'contact_module/profile_list_page.html'
    context_object_name ='profiles'
    # اگر فقط پروفایل کاربر لاگین شده را می‌خواهید، باید queryset را فیلتر کنید
    # def get_queryset(self):
    #     if self.request.user.is_authenticated:
    #         return UserProfile.objects.filter(user=self.request.user)
    #     return UserProfile.objects.none()


from django.contrib import messages

def contact_page(request):
    if request.method == 'POST':
        form = ContactUsForm(request.POST)
        if form.is_valid():
            form.save()

            messages.success(request, 'پیام شما با موفقیت ارسال شد. به زودی پاسخ داده می‌شود.')
            return redirect('contact_page')

    else:
        form = ContactUsForm()

    return render(request, 'contact_module/contact_page.html', {'form': form})

