o
    ¯%j%                     @   sZ   d Z ddlZddlmZ edZejjddd dZg dZd	d
 Z	e
dkr+e	  dS dS )zCreate the Plappi marketing DB and seed the target list.

Idempotent: re-running creates tables IF NOT EXISTS and only inserts a target
when no row with the same (channel, name) already exists. Safe to re-run.
    N)Pathz2/home/agent/plappi-marketing/data/marketing.sqliteT)parentsexist_oku   
CREATE TABLE IF NOT EXISTS targets (
  id INTEGER PRIMARY KEY,
  channel TEXT NOT NULL,            -- 'press' | 'social'
  platform TEXT NOT NULL,           -- email,podcast,reddit,facebook_group,instagram,tiktok,telegram,forum,linkedin,quora
  name TEXT NOT NULL,
  contact TEXT,                     -- email / URL / handle
  url TEXT,
  wave TEXT,                        -- press: A,A2,A3,A4,B,C  · social: tier1,tier2
  angle TEXT,                       -- A/B/C pitch angle or topic note
  posting_mode TEXT NOT NULL,       -- email | auto_own | manual_community | paid
  rules TEXT,                       -- compliance reminder shown before posting
  language TEXT,                    -- de | en
  priority INTEGER DEFAULT 3,
  status TEXT DEFAULT 'active',     -- active | contacted | replied | done | skip
  notes TEXT,
  created_at TEXT DEFAULT (datetime('now')),
  updated_at TEXT DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS items (
  id INTEGER PRIMARY KEY,
  target_id INTEGER,
  channel TEXT NOT NULL,
  type TEXT NOT NULL,               -- press_email | press_followup | social_post | social_comment
  platform TEXT,
  subject TEXT,
  body TEXT NOT NULL,
  disclosure TEXT,                  -- 'Werbung' / NULL
  status TEXT DEFAULT 'pending',    -- pending|approved|sent|posted|rejected|superseded|replied|needs_followup
  scheduled_for TEXT,
  thread_ref TEXT,
  fix_iterations INTEGER DEFAULT 0,
  prompt_used TEXT,
  model_used TEXT,
  created_at TEXT DEFAULT (datetime('now')),
  updated_at TEXT DEFAULT (datetime('now')),
  approved_at TEXT,
  sent_at TEXT,
  FOREIGN KEY (target_id) REFERENCES targets(id)
);
CREATE TABLE IF NOT EXISTS events (
  id INTEGER PRIMARY KEY,
  item_id INTEGER,
  event TEXT,
  detail TEXT,
  ts TEXT DEFAULT (datetime('now'))
);
)%)pressemailzDer Brutkastenzredaktion@derbrutkasten.comzbrutkasten.comABr    de   )r   r   deutsche-startups.dezahuesing@deutsche-startups.der   r   r   r   u-   Hüsing antwortet persönlich — kurz haltenr
   r   )r   r   u   Gründerszene / BI DEzredaktion@gruenderszene.dez businessinsider.de/gruenderszener   r   r   r	   r
   r   )r   r   t3nztipp@t3n.dezt3n.der   r   r   zcoverte Toniesr
      )r   r   zEU-Startupszantonio@eu-startups.comzeu-startups.comr   r   r   r	   enr   )r   r   zStartupticker.chznews@startupticker.chzstartupticker.chr   r   r   r	   r
   r   )r   r   zStartnext Pressezpresse@startnext.comzstartnext.comr   r   r   r	   r
   r   )r   r   zTrending Topicsr	   ztrendingtopics.eur   r   r   u0   Kontakt via Site-Formular (kein Mail bestätigt)r
   r   )r   r   zFuturezone.atr	   zfuturezone.at/start-upsr   r   r   z Start-ups-Desk; Kontakt via Siter
   r   )r   r   ztech.eur	   ztech.eu/startup-formr   r   r   zPitch via Startup-Formularr   r   )r   r   z	Eltern.dezredaktion@eltern.dez	eltern.deA3Cr   r	   r
   r   )r   r   bilingual-erziehen.dezinfo@bilingual-erziehen.der   r   r   r   u'   Review/Gastbeitrag, Testgerät anbietenr
   r   )r   r   zLinguamulti (Z. Ortega)zz.ortega@linguamulti.atzlinguamulti.atr   r   r   u"   Testimonial + Tür zu Der Standardr
   r   )r   r   german-toys.comzinfo@german-toys.comr   r   r   r   zAngle: Plappi vs. Tonieboxr
   r   )r   r   zfratz&cozredaktion@timepub.atzfratz.atr   r   r   r	   r
   r   )r   r   
babelli.dezinfo@babelli.der   r   r   r   r	   r
   r   )r   r   zSprachheld.der	   zsprachheld.der   r   r   z,Gastbeitrag-Formular, 2-4 Themen vorschlagenr
   r   )r   r   zSpielzeugwelten.dezinfo@spielzeugwelten.dezspielzeugwelten.der   r   r   zTestmuster anbietenr
   r   )r   podcastzDie Linguistin (B. Gruber)zinfo@dielinguistin.atzdielinguistin.atA4r   r      Gründer als Gastr
   r   )r   r   zBOLD & BILINGUAL (S. Edelhoff)zsabine@belingualathome.comzbelingualathome.comr   r   r   r   r
   r   )r   r   zEngadget (K. Naudus)r	   zengadget.comr   r   r   u    Yoto-Hands-on; Testgerät nötigr      )r   r   zWirecutter/NYT (A. Rochford)r	   znytimes.com/wirecutterr   r   r   u   Yoto-Test; Testgerät nötigr   r   )r   r   u'   The Toy Book — Talkin' Toys (J. Zahn)r	   ztoybook.comr   r   r   z&coverte TIMIO+Storypod; @TheRockFatherr   r   )r   r   zThe Gadgeteerr	   zthe-gadgeteer.comr   r   r   u!   Kids-Audio-Vergleiche; Testgerätr   r   )socialredditzr/multilingualparenting"reddit.com/r/multilingualparentingr   tier1r   manual_communityzS90/10-Regel, value-first, 'I'm the founder' offenlegen, nur in Promo-Threads werbenr   r   )r   r   z	r/germanyreddit.com/r/germanyr   r   r   r   z8Toniebox-Threads laufen dort; value-first, kein Linkdropr   r   )r   r   z	r/austriareddit.com/r/austriar   r   r   r   z(value-first, AT-Startup-Angle, kein Spamr
   r   )r   r   zr/Elternreddit.com/r/Elternr    r   r   r   zklein aber exakt; value-firstr
   r   )r   facebook_groupz'Raising Bilingual/Multilingual Childrenz8facebook.com/groups/RaisingBilingualMultilingualChildrenr	   r   r   r   u4   Gruppenregeln lesen, Admin-OK/Promo-Tag für Werbungr   r   )r   r!   z*Bilingual Kidspot (Little Global Citizens)z$facebook.com/groups/bilingualkidspotr	   r   r   r   zGruppenregeln, value-firstr   r   )r   r!   z.Non-native Speakers Raising Bilingual Childrenz#facebook.com/groups/277780785899414r	   r   r   r   u)   exakter Fit; Admin-Erlaubnis für Werbungr   r   )r   r!   zToniebox Communityz$facebook.com/groups/2424166074431755r	   r   r   r   u:   warm für screen-free Audio; vorsichtig, kein harter Pitchr   r   )r   forumu$   urbia.de — Mehrsprachig aufwachsenzurbia.de/forum/21-erziehungr	   r   r   r   zADE-Forum; org. Teilnahme + Offenlegung, Werbung sonst nur bezahltr
   r   )r   r"   u#   rund-ums-baby.de — /mehrsprachig/z*rund-ums-baby.de/eltern-forum/mehrsprachigr	   r   r   r   z/dediziertes Subforum; value-first + Offenlegungr
   r   )r   	instagramzPlappi Instagram@helloplappizinstagram.com/helloplappir   r   auto_ownz%eigener Kanal; 'Werbung' kennzeichnenr
   r   )r   tiktokzPlappi TikTokr$   ztiktok.com/@helloplappir   r   r%   z4eigener Kanal; Disclosure-Toggle + 'Werbung' Captionr
   r   )r   linkedinzFounder LinkedIn (Plappi-Story)r	   zlinkedin.comr   r   r%   u.   kann über bestehende LinkedIn-Pipeline laufenr
   r   c                  C   s   t t} | t d}tD ]"}|d |d }}| d||f }|r&q| d| |d7 }q|   | d d }| d d }| 	  t
dt  t
d	| d
| d|  d S )Nr      z0SELECT 1 FROM targets WHERE channel=? AND name=?zINSERT INTO targets (channel,platform,name,contact,url,wave,angle,
                                    posting_mode,rules,language,priority)
               VALUES (?,?,?,?,?,?,?,?,?,?,?)   z2SELECT COUNT(*) FROM targets WHERE channel='press'z3SELECT COUNT(*) FROM targets WHERE channel='social'zDB ok: z  inserted u    new targets · press=z social=)sqlite3connectDBexecutescriptSCHEMATARGETSexecutefetchonecommitcloseprint)conninstchannelnameexistsn_pressn_soc r=   F/home/nk/hobo-godmode/otto/projekte/plappi/marketing/engine/init_db.pymainp   s.   


r?   __main__)__doc__r*   pathlibr   r,   parentmkdirr.   r/   r?   __name__r=   r=   r=   r>   <module>   s   21
