import re
from django.core.exceptions import ValidationError
from datetime import date

# 1. 🎂 Age Validator (Min 18 Years)
def validate_age_18(value):
    if not value: return
    today = date.today()
    age = today.year - value.year - ((today.month, today.day) < (value.month, value.day))
    if age < 18:
        raise ValidationError("Bhai, Videsh Chalo par kaam karne ke liye aapki umar kam se kam 18 saal honi chahiye.")

# 2. 📱 Mobile Validator (10-14 Digits)
def validate_mobile_number(value):
    if not value: return
    # Spaces aur plus hata kar clean karein
    clean_val = str(value).replace(" ", "").replace("-", "")
    # Regex: Optional +, then 10 to 13 digits
    rule = re.compile(r'^\+?\d{10,13}$')
    if not rule.search(clean_val):
        raise ValidationError("Mobile number sahi nahi hai. Kam se kam 10 digit hone chahiye (Example: +9198XXXXXXXX).")

# 3. 🛠️ Experience Validator (0-60 Years)
def validate_experience(value):
    if value is not None:
        if value < 0:
            raise ValidationError("Experience minus mein nahi ho sakta bhai!")
        if value > 60:
            raise ValidationError("Bhai, 60 saal se zyada experience practical nahi hai. Sahi info bhariye.")

# 4. 📧 Email Guard (Disposable & Fake Block)
def validate_videsh_email(value):
    if not value: return
    email_lower = value.lower()
    
    # Block List
    forbidden = ['test@test.com', 'abc@xyz.com', 'videsh@chalo.com', '123@123.com']
    if email_lower in forbidden:
        raise ValidationError("Bhai, ye asli email nahi lag raha. Kripya apna sahi email use karein.")

    # Disposable Domains
    disposable = ['tempmail.com', '10minutemail.com', 'guerrillamail.com', 'yopmail.com', 'mailinator.com']
    domain = email_lower.split('@')[-1]
    if domain in disposable:
        raise ValidationError(f"Bhai, '{domain}' jaise kachra emails allowed nahi hain. Asli email bharein.")
        
def validate_file_size(value):
    filesize = value.size
    if filesize > 3145728: # 3MB Limit
        raise ValidationError("Bhai, file 3MB se choti honi chahiye. Kripya compress karke upload karein.")
