#!/usr/bin/env python3
"""
Backfill parketry_published_content with existing articles from WordPress.
This enables semantic deduplication against existing content.
"""

import logging
import sys
from datetime import datetime
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent.parent))

import requests
from config.settings import get_settings
from database.connection import test_connection
from database.models import PublishedContentRepository

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s",
)
logger = logging.getLogger(__name__)


# Existing articles from parketry.de (manually extracted summaries)
# These represent content already published that should be avoided for deduplication
EXISTING_ARTICLES = [
    {
        "title": "ANPR-Parkraummanagement: Der vollständige Leitfaden für 2025",
        "slug": "anpr-parkraummanagement-leitfaden",
        "summary": "Umfassender Leitfaden zu ANPR-Parkraummanagement. Erklärt Funktionsweise der Kennzeichenerkennung, Vorteile gegenüber Schranken, rechtliche Grundlagen in Deutschland, Kosten und ROI-Berechnung sowie Implementierungsschritte für verschiedene Branchen.",
        "main_keywords": "ANPR, Parkraummanagement, Kennzeichenerkennung, Parkplatzverwaltung",
        "wp_post_id": None,
        "published_at": "2024-11-15",
    },
    {
        "title": "Privatparkplatz überwachen: Rechtssichere Lösungen gegen Fremdparker",
        "slug": "privatparkplatz-ueberwachen",
        "summary": "Rechtliche Möglichkeiten zur Überwachung von Privatparkplätzen. DSGVO-konforme Kennzeichenerfassung, Vertragsstrafen durchsetzen, Halterermittlung, Beschilderungspflichten und praktische Tipps für Supermärkte, Praxen und Wohnanlagen.",
        "main_keywords": "Privatparkplatz, Fremdparker, Vertragsstrafe, Parkraumüberwachung",
        "wp_post_id": None,
        "published_at": "2024-10-20",
    },
    {
        "title": "Digitale Parkplatzverwaltung für WEG und Tiefgaragen",
        "slug": "parkplatzverwaltung-weg-tiefgarage",
        "summary": "Digitale Lösungen für Wohnungseigentümergemeinschaften und Tiefgaragen. Stellplatzverwaltung automatisieren, Mieterparkplätze organisieren, Besucherregelungen umsetzen und Dauerparkerproblemen vorbeugen mit moderner Technologie.",
        "main_keywords": "WEG Parkplatz, Tiefgarage, Stellplatzverwaltung, Mieterparkplatz",
        "wp_post_id": None,
        "published_at": "2024-09-28",
    },
    {
        "title": "Kundenparkplätze schützen: ANPR für Einzelhandel und Gastronomie",
        "slug": "kundenparkplaetze-einzelhandel",
        "summary": "ANPR-Systeme für Supermärkte, Restaurants und Einzelhandel. Fremdparker erkennen, Parkzeitbegrenzungen durchsetzen, Kundenzufriedenheit steigern. ROI-Berechnung, Fallstudien und Implementierungstipps für kleine bis mittlere Parkplätze.",
        "main_keywords": "Kundenparkplatz, Einzelhandel, Supermarkt Parkplatz, Gastronomie",
        "wp_post_id": None,
        "published_at": "2024-08-30",
    },
    {
        "title": "Firmenparkplätze verwalten: Mitarbeiter- und Besucherparkplätze",
        "slug": "firmenparkplaetze-verwalten",
        "summary": "Effiziente Verwaltung von Firmenparkplätzen mit digitalen Systemen. Mitarbeiterparkplätze zuweisen, Besuchermanagement automatisieren, Parkplatzbuchungssysteme, Integration mit Zutrittskontrolle und HR-Systemen.",
        "main_keywords": "Firmenparkplatz, Mitarbeiterparkplatz, Besucherparkplatz, Unternehmen",
        "wp_post_id": None,
        "published_at": "2024-07-15",
    },
    {
        "title": "DSGVO-konforme Kennzeichenerfassung: Rechtsleitfaden",
        "slug": "dsgvo-kennzeichenerfassung",
        "summary": "Datenschutzkonformer Betrieb von ANPR-Systemen. DSGVO-Anforderungen, Speicherfristen, Beschilderungspflichten, Datenschutzfolgenabschätzung, Verarbeitungsverzeichnis und Betroffenenrechte bei der Kennzeichenerfassung auf Privatparkplätzen.",
        "main_keywords": "DSGVO, Datenschutz, Kennzeichenerfassung, Parkplatz Recht",
        "wp_post_id": None,
        "published_at": "2024-06-20",
    },
    {
        "title": "Parkplatzmanagement für Arztpraxen und MVZ",
        "slug": "parkplatzmanagement-arztpraxis",
        "summary": "Spezielle Anforderungen für Arztpraxen und medizinische Versorgungszentren. Patientenparkplätze fair verteilen, Notfallzugänge freihalten, barrierefreie Parkplätze schützen, Mitarbeiterparkplätze organisieren.",
        "main_keywords": "Arztpraxis Parkplatz, MVZ, Patientenparkplatz, Gesundheitswesen",
        "wp_post_id": None,
        "published_at": "2024-05-10",
    },
    {
        "title": "Vertragsstrafen auf Privatparkplätzen: Rechtliche Grundlagen",
        "slug": "vertragsstrafen-privatparkplatz",
        "summary": "Rechtliche Grundlagen für Vertragsstrafen auf Privatparkplätzen. Aktuelle Rechtsprechung, zulässige Höhe, Durchsetzung gegen Halter, Inkasso-Prozesse und häufige Einwände von Falschparkern mit Gegenstrategien.",
        "main_keywords": "Vertragsstrafe, Privatparkplatz, Falschparker, Parkstrafe",
        "wp_post_id": None,
        "published_at": "2024-04-05",
    },
]


def fetch_wp_posts_if_available() -> list[dict]:
    """Try to fetch existing posts from WordPress REST API."""
    settings = get_settings()
    try:
        response = requests.get(
            f"{settings.wp_url}/wp-json/wp/v2/posts",
            params={"per_page": 100, "categories": ""},  # Will need category ID
            auth=settings.wp_auth,
            timeout=10,
        )
        if response.status_code == 200:
            return response.json()
    except Exception as e:
        logger.warning(f"Could not fetch WP posts: {e}")
    return []


def backfill_existing():
    """Insert existing articles into published_content table."""
    if not test_connection():
        logger.error("Database connection failed")
        return 1

    logger.info(f"Backfilling {len(EXISTING_ARTICLES)} existing articles")
    inserted = 0
    skipped = 0

    for article in EXISTING_ARTICLES:
        try:
            published_at = datetime.strptime(article["published_at"], "%Y-%m-%d")
            PublishedContentRepository.insert(
                source="existing",
                title=article["title"],
                slug=article["slug"],
                summary=article["summary"],
                main_keywords=article["main_keywords"],
                wp_post_id=article.get("wp_post_id"),
                published_at=published_at,
            )
            inserted += 1
            logger.debug(f"Inserted: {article['title'][:50]}...")
        except Exception as e:
            if "Duplicate entry" in str(e):
                skipped += 1
                logger.debug(f"Skipped duplicate: {article['slug']}")
            else:
                logger.error(f"Error inserting {article['slug']}: {e}")

    logger.info(f"Backfill complete: {inserted} inserted, {skipped} skipped")
    return 0


if __name__ == "__main__":
    sys.exit(backfill_existing())
