"""
جایگزینی همه عکس‌ها با تصاویر شکیل‌تر و متناسب با هر بخش.
(عکس‌های فعلی را بازنویسی می‌کند - حتی اگر از قبل عکس داشته باشند)
نیاز: pip install Pillow    اجرا: python replace_images.py
"""
import os, django, random, math
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'artaghadir.settings')
django.setup()

from PIL import Image, ImageDraw, ImageFilter, ImageFont
from io import BytesIO
from django.core.files.base import ContentFile

def gradient_bg(w, h, c1, c2, diagonal=True):
    grad = Image.new('RGB', (w, h))
    px = grad.load()
    for y in range(h):
        for x in range(0, w, 2):
            t = ((x/w) + (y/h)) / 2 if diagonal else y/h
            r = int(c1[0]*(1-t) + c2[0]*t)
            g = int(c1[1]*(1-t) + c2[1]*t)
            b = int(c1[2]*(1-t) + c2[2]*t)
            px[x, y] = (r, g, b)
            if x+1 < w: px[x+1, y] = (r, g, b)
    return grad

def add_mountains(img, w, h, color):
    """Draw stylized mountain silhouette (mining theme)."""
    d = ImageDraw.Draw(img, 'RGBA')
    base_y = int(h * 0.95)
    points = [(0, base_y)]
    x = 0
    while x < w:
        peak = random.randint(int(h*0.35), int(h*0.65))
        points.append((x, base_y - peak))
        x += random.randint(w//6, w//4)
    points.append((w, base_y))
    points.append((w, h)); points.append((0, h))
    d.polygon(points, fill=color + (90,))
    # second layer
    points2 = [(0, base_y)]
    x = -50
    while x < w:
        peak = random.randint(int(h*0.2), int(h*0.4))
        points2.append((x, base_y - peak))
        x += random.randint(w//5, w//3)
    points2.append((w, base_y)); points2.append((w, h)); points2.append((0, h))
    d.polygon(points2, fill=color + (140,))

def geo_circles(img, w, h):
    d = ImageDraw.Draw(img, 'RGBA')
    for _ in range(4):
        cx, cy = random.randint(0,w), random.randint(0,h)
        r = random.randint(w//5, w//2)
        d.ellipse([cx-r,cy-r,cx+r,cy+r], outline=(255,255,255,18), width=2)

def finalize(img):
    buf = BytesIO()
    img.convert('RGB').save(buf, 'JPEG', quality=85, optimize=True)
    buf.seek(0)
    return ContentFile(buf.read())

# Theme colors
NAVY=(13,27,42); BLUE=(27,58,107); STEEL=(45,90,155); GOLD=(200,150,42)
TEAL=(13,148,136); GREEN=(16,185,129)

def project_img(w=800,h=500):
    img = gradient_bg(w,h,NAVY,STEEL)
    add_mountains(img,w,h,BLUE)
    geo_circles(img,w,h)
    return finalize(img)

def news_img(w=800,h=450):
    img = gradient_bg(w,h,BLUE,(60,90,150))
    geo_circles(img,w,h)
    return finalize(img)

def service_img(w=600,h=400):
    img = gradient_bg(w,h,(20,70,100),TEAL)
    geo_circles(img,w,h)
    return finalize(img)

def award_img(w=500,h=500):
    img = gradient_bg(w,h,GOLD,(150,110,30))
    geo_circles(img,w,h)
    return finalize(img)

def team_img(w=400,h=400):
    img = gradient_bg(w,h,BLUE,STEEL)
    geo_circles(img,w,h)
    return finalize(img)

def slider_img(w=1400,h=600):
    img = gradient_bg(w,h,NAVY,BLUE)
    add_mountains(img,w,h,STEEL)
    geo_circles(img,w,h)
    return finalize(img)

count = 0
from apps.projects.models import Project
from apps.news.models import Article
from apps.core.models import Service, Award, TeamMember, Slider

print("جایگزینی تصاویر با طرح‌های شکیل (کوه + بافت معدنی)...")

for p in Project.objects.all():
    p.cover_image.save(f'proj_{p.pk}.jpg', project_img(), save=True); count+=1
print(f"  ✓ {Project.objects.count()} پروژه")

for a in Article.objects.all():
    a.cover_image.save(f'news_{a.pk}.jpg', news_img(), save=True); count+=1
print(f"  ✓ {Article.objects.count()} خبر")

for s in Service.objects.all():
    s.image.save(f'svc_{s.pk}.jpg', service_img(), save=True); count+=1
print(f"  ✓ {Service.objects.count()} خدمت")

for aw in Award.objects.all():
    aw.image.save(f'award_{aw.pk}.jpg', award_img(), save=True); count+=1
print(f"  ✓ {Award.objects.count()} تقدیرنامه")

for t in TeamMember.objects.all():
    t.photo.save(f'team_{t.pk}.jpg', team_img(), save=True); count+=1
print(f"  ✓ {TeamMember.objects.count()} عضو تیم")

for sl in Slider.objects.all():
    sl.image.save(f'slider_{sl.pk}.jpg', slider_img(), save=True); count+=1
print(f"  ✓ {Slider.objects.count()} اسلایدر")

print(f"\n✅ {count} تصویر شکیل ساخته و جایگزین شد. صفحه را Ctrl+Shift+R کنید.")
