from pydantic import BaseModel, Field


class FactContent(BaseModel):
    fact: str = Field(description="Türkçe, 25-45 kelimelik ilginç ve doğrulanabilir bir bilgi.")
    title: str = Field(
        description=(
            "2-5 kelimelik Türkçe başlık. Bilgiyi DÜZ şekilde özetleme — bilginin sonucundan/"
            "esprisinden yola çıkan, dolaylı ve esprili bir başlık yaz. Örnek: bilgi bir Formula 1 "
            "pilotunun bir yarışta yoğun G kuvveti ve terleme nedeniyle 3-4 kilo kaybettiğiyle "
            "ilgiliyse, başlık 'Formula 1 Pilotu Kilo Kaybı' gibi düz bir özet DEĞİL, 'Diyetle "
            "Uğraşmaya Son' gibi esprili/şaşırtıcı bir sonuç cümlesi olmalı."
        )
    )
    description: str = Field(description="1-2 cümlelik Türkçe video açıklaması.")
    hashtags: list[str] = Field(
        min_length=5,
        max_length=8,
        description=(
            "Bilginin içeriğiyle ilgili, '#' işareti olmadan 5-8 Türkçe/İngilizce hashtag kelimesi. "
            "'shorts', 'viral', 'keşfet', 'bilgi' etiketlerini EKLEME (bunlar otomatik ekleniyor), "
            "sadece bu bilgiye özgü konuyla ilgili etiketler üret."
        ),
    )


def build_prompt(category_display_name: str, avoid_facts: list[str]) -> str:
    avoid_block = "\n".join(f"- {f}" for f in avoid_facts) if avoid_facts else "(henüz yok)"
    return f"""Sen bir YouTube Shorts kanalı için içerik üreten bir asistansın. Kanal, kısa ve
çarpıcı "ilginç bilgi" videoları yayınlıyor.

Kategori: {category_display_name}

Görev: Bu kategoride, aşağıda listelenen bilgilerin HİÇBİRİYLE aynı veya anlamca çok benzer
OLMAYAN, tamamen yeni, doğru ve ilginç bir bilgi üret. Konuyu, açıyı veya spesifik detayı
(örnek: farklı bir kişi, olay, rekor, tarih) değiştirerek belirgin şekilde farklılaştır.

Daha önce kullanılmış bilgiler (bunları tekrar etme, bunlara benzer bilgiler de üretme):
{avoid_block}

Çıktı formatı kesinlikle şu alanları içermeli: fact, title, description, hashtags.
- fact: 25-45 kelime, Türkçe, akıcı tek/çift cümle, doğrulanabilir bir gerçek.
- title: 2-5 kelime, Türkçe. Bilgiyi DÜZ şekilde özetleyen bir başlık YAZMA. Bunun yerine bilginin
  yarattığı şaşırtıcı/komik sonuçtan yola çıkan, dolaylı ve esprili bir başlık yaz. Örnek: bilgi
  "Bir Formula 1 pilotu, sadece tek bir yarış boyunca maruz kaldığı aşırı G kuvveti ve terleme
  nedeniyle ortalama 3 ila 4 kilo kaybetmektedir." ise, başlık "Formula 1 Pilotu Kilo Kaybı" gibi
  düz bir özet DEĞİL, "Diyetle Uğraşmaya Son" gibi esprili/dolaylı bir sonuç cümlesi olmalı.
- description: 1-2 cümle, Türkçe, fact'i tekrar etmeden merak uyandıran bir açıklama.
- hashtags: 5-8 adet, '#' işareti OLMADAN, sadece bu bilgiye özgü konuyla ilgili etiketler
  (örn. "finans", "formula1", "ilginçbilgiler"). "shorts", "viral", "keşfet", "bilgi" etiketlerini
  KESİNLİKLE ekleme — bunlar otomatik olarak her videoya ekleniyor, tekrar üretme.
"""
