from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    phone_number = models.CharField(max_length=15, verbose_name="رقم الهاتف")
    LANGUAGE_CHOICES = [
        ('ar', 'العربية'),
        ('en', 'الإنكليزية'),
        ('ku', 'الكردية'),
    ]
    preferred_language = models.CharField(max_length=2, choices=LANGUAGE_CHOICES, verbose_name="اللغة المختارة")
    city = models.ForeignKey("City", on_delete=models.SET_NULL, null=True, blank=True, verbose_name="المدينة")
    image = models.ImageField(upload_to='profile/', null=True, blank=True, verbose_name="صورة")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")


class City(models.Model):
    name_ar = models.CharField(max_length=100, verbose_name="اسم المدينة باللغة العربية")
    name_en = models.CharField(max_length=100, verbose_name="اسم المدينة باللغة الإنكليزية")
    name_ku = models.CharField(max_length=100, verbose_name="اسم المدينة باللغة الكردية")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")

    class Meta:
        verbose_name = "مدينة"
        verbose_name_plural = "المدن"

    def __str__(self):
        return self.name_ar

class Category(models.Model):
    name_ar = models.CharField(max_length=100, verbose_name="اسم عربي")
    name_en = models.CharField(max_length=100, verbose_name="اسم إنكليزي")
    name_ku = models.CharField(max_length=100, verbose_name="اسم كردي")
    image = models.ImageField(upload_to='categories/', verbose_name="صورة")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")
    
    class Meta:
        verbose_name = "قائمة"
        verbose_name_plural = "القوائم"

    def __str__(self):
        return self.name_ar

class Place(models.Model):
    city = models.ForeignKey(City, on_delete=models.CASCADE, verbose_name="المدينة")
    category = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name="الفئة")
    user = models.OneToOneField(User, on_delete=models.CASCADE, limit_choices_to={'is_staff': True},  blank=True, null=True, verbose_name="المستخدم")
    name_ar = models.CharField(max_length=100, verbose_name="اسم عربي")
    name_en = models.CharField(max_length=100, verbose_name="اسم إنكليزي")
    name_ku = models.CharField(max_length=100, verbose_name="اسم كردي")
    cover_image = models.ImageField(upload_to='places/', verbose_name="صورة غلاف")
    longitude = models.FloatField(verbose_name="خط الطول")
    latitude = models.FloatField(verbose_name="خط العرض")
    rating = models.FloatField(verbose_name="تقييم (خمس نجوم)")
    description_ar = models.TextField(verbose_name="وصف عربي", blank=True, null=True)
    description_en = models.TextField(verbose_name="وصف انكليزي", blank=True, null=True)
    description_ku = models.TextField(verbose_name="وصف كري", blank=True, null=True)
    map_link = models.URLField(verbose_name="رابط الخريطة", blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")
    
    class Meta:
        verbose_name = "مكان"
        verbose_name_plural = "الاماكن"

    def __str__(self):
        return self.name_ar

class SocialMediaLink(models.Model):
    place = models.ForeignKey(Place, on_delete=models.CASCADE, verbose_name="المكان")
    ICON_CHOICES = [
        ('facebook', 'فيسبوك'),
        ('instagram', 'إنستاجرام'),
        ('telegram', 'تليجرام'),
        ('snapchat', 'سناب شات'),
        ('linkedin', 'لينكد إن'),
        ('tiktok', 'تيك توك'),
        ('website', 'موقع إلكتروني'),
        ('whatsapp', 'واتساب'),
    ]
    icon_type = models.CharField(max_length=20, choices=ICON_CHOICES, verbose_name="نوع الايقونة")
    link = models.URLField(verbose_name="الرابط")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")


    class Meta:
        verbose_name = "رابط"
        verbose_name_plural = "روابط السوشال ميديا للمستخدمين"

    def __str__(self):
        return self.icon_type + " : " + self.place.name_ar

class PlaceImage(models.Model):
    place = models.ForeignKey(Place, on_delete=models.CASCADE, verbose_name="المكان")
    title_ar = models.CharField(max_length=100, verbose_name="عنوان الصورة بالعربي")
    title_en = models.CharField(max_length=100, verbose_name="عنوان الصورة بالإنكليزي")
    title_ku = models.CharField(max_length=100, verbose_name="عنوان الصورة بالكردي")
    image = models.ImageField(upload_to='place_images/', verbose_name="ملف الصورة")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")


    class Meta:
        verbose_name = "صورة"
        verbose_name_plural = "صور المستخدمين"

    def __str__(self):
        return self.title_ar

class Booking(models.Model):
    place = models.ForeignKey(Place, on_delete=models.CASCADE, verbose_name="المكان")
    user = models.ForeignKey(User,  blank=True, null=True,on_delete=models.CASCADE, verbose_name="المستخدم")
    subject = models.CharField(max_length=100, verbose_name="عنوان الرسالة")
    message = models.TextField(verbose_name="نص الرسالة")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")


    class Meta:
        verbose_name = "حجز"
        verbose_name_plural = "الحجوزات الخاصة بالاماكن"

    def __str__(self):
        return f"Booking by {self.user.username} for {self.place.name_en}"

class FavoritePlace(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_fav"  ,  verbose_name="المستخدم")
    place = models.ForeignKey(Place, on_delete=models.CASCADE, related_name="place_fav"  , verbose_name="المكان")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")


    class Meta:
        verbose_name = "مفضلة"
        verbose_name_plural = "الاماكن المفضلة للمستخدمين"

    def __str__(self):
        return f"{self.user.username}'s favorite {self.place.name_en}"

# أرقام الطوارئ Model
class EmergencyNumber(models.Model):
    title_ar = models.CharField(max_length=100, verbose_name="العنوان باللغة العربية")
    title_en = models.CharField(max_length=100, verbose_name="العنوان باللغة الإنكليزية")
    title_ku = models.CharField(max_length=100, verbose_name="العنوان باللغة الكردية")
    phone_number = models.CharField(max_length=20, verbose_name="رقم الهاتف")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")


    class Meta:
        verbose_name = "رقم طوارئ"
        verbose_name_plural = "ارقام الطوارئ"

    def __str__(self):
        return self.title_ar

# الاتصال بنا Model
class ContactUs(models.Model):
    user_name = models.CharField(max_length=100, verbose_name="اسم المستخدم")
    phone_number = models.CharField(max_length=20, verbose_name="رقم الهاتف")
    email = models.EmailField(verbose_name="البريد الإلكتروني")
    message = models.TextField(verbose_name="الرسالة")
    is_read = models.BooleanField(default=False, verbose_name="هل تمت القراءة")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإنشاء")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")


    class Meta:
        verbose_name = "رسالة"
        verbose_name_plural = "رسائل التواصل مع الدعم"

    def __str__(self):
        return f"Message from {self.user_name}"


class Advertisement(models.Model):
    cities = models.ManyToManyField(City, verbose_name="المدن")
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="صاحب الإعلان")
    title_ar = models.CharField(max_length=100, verbose_name="عنوان الإعلان بالعربية")
    title_en = models.CharField(max_length=100, verbose_name="عنوان الإعلان بالإنكليزية")
    title_ku = models.CharField(max_length=100, verbose_name="عنوان الإعلان بالكردية")
    image = models.ImageField(upload_to='advertisements/', verbose_name="صورة الإعلان")
    link = models.URLField(verbose_name="رابط الإعلان")
    is_active = models.BooleanField(default=True, verbose_name="هل الإعلان مفعل؟")
    expiry_date = models.DateTimeField(verbose_name="تاريخ صلاحية الإعلان")
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="تاريخ الإضافة")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="تاريخ التعديل")
    text_1_ar = models.CharField(max_length=100, verbose_name="نص اول بالعربي")
    text_1_en = models.CharField(max_length=100, verbose_name="نص اول بالانكليزي")
    text_1_ku = models.CharField(max_length=100, verbose_name="نص اول بالكردي")
    text_2_ar = models.CharField(max_length=100, verbose_name="نص اول بالعربي")
    text_2_en = models.CharField(max_length=100, verbose_name="نص اول بالانكليزي")
    text_2_ku = models.CharField(max_length=100, verbose_name="نص اول بالكردي")
    rating = models.FloatField(verbose_name="تقييم (خمس نجوم)")


    class Meta:
        verbose_name = "اعلان"
        verbose_name_plural = "الاعلانات"

    def __str__(self):
        return self.title_ar