#!/usr/bin/env python3
import json, re, sys
from pathlib import Path

REPO = Path('/Users/bryce/FLSM')
TEMPLATE = REPO / 'Emerson North/templates/weekly_scripts.html'

def clean(text):
    text = re.sub(r'\[SOURCE:[^\]]+\]', '', text)
    text = re.sub(r'\[PLACEHOLDER:[^\]]+\]', '', text)
    text = re.sub(r'\[INTERNAL LINK:[^\]]+\]', '', text)
    text = re.sub(r'\*\*([^*]+)\*\*', r'<strong>\1</strong>', text)
    text = re.sub(r'\*([^*]+)\*', r'<em>\1</em>', text)
    return re.sub(r'\n{3,}', '\n\n', text.strip())

def fmt(text):
    text = clean(text)
    parts = [p.strip() for p in text.split('\n\n') if p.strip()]
    return '<br><br>'.join(parts) if len(parts) > 1 else text.replace('\n', '<br>')

def yt_card(d, n, tot):
    pid = d['piece_id']
    title = d.get('title', pid)
    sections = []
    for key, label, timing in [
        ('hook_0_3s','HOOK','0:00 - 0:05'),('hook','HOOK','0:00 - 0:10'),
        ('open_3_30s','OPEN','0:05 - 0:30'),('open','OPEN','0:05 - 0:30'),
        ('epiphany_open_30s_2min','EPIPHANY','0:30 - 2:00'),('epiphany_open','EPIPHANY','0:30 - 2:00'),
        ('core_content_2min_12min','CORE CONTENT','2:00 - 12:00'),('core_content','CORE CONTENT','2:00 - 12:00'),
        ('proof_bridge_12min_13min','PROOF','12:00 - 13:00'),('proof_bridge','PROOF','12:00 - 13:00'),
        ('offer_close_13_15min','CLOSE + CTA','13:00 - 15:00'),('offer_close','CLOSE + CTA','13:00 - 15:00'),
    ]:
        if d.get(key) and label not in [s[0] for s in sections]:
            sections.append((label, timing, d[key]))
    body = ''.join(f'<div class="script-section"><div class="script-section-label">{l}</div><div class="script-section-time">{t}</div><div class="script-section-text">{fmt(v)}</div></div>' for l,t,v in sections)
    meta = f'<span class="meta-tag"><strong>Platform</strong> YouTube</span><span class="meta-tag"><strong>Date</strong> {d.get("_date","")}</span><span class="meta-tag"><strong>Duration</strong> 10-15 min</span><span class="meta-tag"><strong>Angle</strong> {d.get("angle","").title()}</span><span class="meta-tag"><strong>Mode</strong> {d.get("mode","TEACH")}</span>'
    return f'<div class="script" id="{pid}"><div class="script-header"><label class="script-check"><input type="checkbox" onchange="toggleScript(this,\'{pid}\')"><span class="script-check-box"></span><span class="script-check-label">Recorded</span></label><span class="script-number">{n}</span><div style="overflow:hidden"><div class="script-number-label">Script {n} of {tot}</div><div class="script-title">{title}</div></div><div class="script-meta">{meta}</div></div><div class="script-body">{body}</div></div>'

def clip_card(clip, short_id, cn, n, tot, date):
    plat = clip.get('platform', f'Clip {cn}')
    dur = clip.get('duration', '45-60s')
    headline = clip.get('screen_headline', '')
    body_copy = clip.get('screen_body_copy', clip.get('screen_body', ''))
    script_text = clip.get('script', '')
    hook = clip.get('hook_variant_a', clip.get('hook_a', ''))
    cid = f'{short_id}_c{cn}'
    meta = f'<span class="meta-tag"><strong>Platform</strong> {plat}</span><span class="meta-tag"><strong>Date</strong> {date}</span><span class="meta-tag"><strong>Duration</strong> {dur}</span>'
    if headline:
        meta += f'<span class="meta-tag"><strong>Screen</strong> {headline[:35]}</span>'
    screen = ''
    if headline or body_copy:
        sc = (f'<strong>{headline}</strong>' if headline else '') + ('<br>'+clean(body_copy).replace('\n','<br>') if body_copy else '')
        screen = f'<div class="script-section"><div class="script-section-label">SCREEN OVERLAY</div><div class="script-section-time">Upper-third on mobile</div><div class="script-section-text">{sc}</div></div>'
    hk = f'<div class="script-section"><div class="script-section-label">HOOK</div><div class="script-section-time">First 3 seconds</div><div class="script-section-text">{clean(hook)}</div></div>' if hook else ''
    sc_body = f'<div class="script-section"><div class="script-section-label">FULL SCRIPT</div><div class="script-section-time">{dur} - record vertical (9:16)</div><div class="script-section-text">{fmt(script_text)}</div></div>'
    return f'<div class="script" id="{cid}"><div class="script-header"><label class="script-check"><input type="checkbox" onchange="toggleScript(this,\'{cid}\')"><span class="script-check-box"></span><span class="script-check-label">Recorded</span></label><span class="script-number">{n}</span><div style="overflow:hidden"><div class="script-number-label">Script {n} of {tot}</div><div class="script-title">{plat} - {dur}</div></div><div class="script-meta">{meta}</div></div><div class="script-body">{screen}{hk}{sc_body}</div></div>'

def make_week(wn, yt_ids, sh_ids, bdir, tmpl, cname, cid, daterange, url, cdata):
    dlookup = {p['id']: p.get('date','') for p in cdata.get('pieces',[])}
    tot = len(yt_ids)
    for s in sh_ids:
        sp = bdir/f'scripts/{s}.json'
        if sp.exists():
            tot += len(json.loads(sp.read_text()).get('clips',[]))
    html_parts = []
    n = 0
    for yt, sh in zip(yt_ids, sh_ids):
        yp = bdir/f'scripts/{yt}.json'
        if yp.exists():
            d = json.loads(yp.read_text())
            d['_date'] = dlookup.get(yt,'')
            n += 1; html_parts.append(yt_card(d, n, tot))
        sp = bdir/f'scripts/{sh}.json'
        if sp.exists():
            sd = json.loads(sp.read_text())
            sdate = dlookup.get(sh,'')
            for ci, clip in enumerate(sd.get('clips',[]), 1):
                n += 1; html_parts.append(clip_card(clip, sh, ci, n, tot, sdate))
    scripts_html = ''.join(html_parts)
    h = tmpl.replace('{{CLIENT_NAME}}', cname).replace('{{WEEK_NUMBER}}', str(wn)).replace('{{CYCLE_ID}}', cid).replace('{{WEEK_DATE_RANGE}}', daterange).replace('{{SCRIPT_COUNT}}', str(tot)).replace('{{UPLOAD_URL}}', url).replace('{{SCRIPTS_HTML}}', scripts_html).replace('{{EXPERIENTIAL_HTML}}','').replace('{{STITCH_HTML}}','')
    return h

cycle_id = 'lasting-language-therapy-2026-04-14'
bdir = REPO / f'.tmp/briefs/{cycle_id}'
cdata = json.loads((bdir/'content_data_v2.json').read_text())
tmpl = TEMPLATE.read_text()
client_name = cdata['client_name']
client_id = cdata['client_id']
upload_url = f'https://{client_id}.emersonnorth.com'
w1 = make_week(1,['yt1','yt3'],['short1','short2'],bdir,tmpl,client_name,cycle_id,'April 20-26, 2026',upload_url,cdata)
out1 = bdir/'weekly_scripts_week1.html'
out1.write_text(w1)
print(f'Week 1: {out1} ({len(w1):,} bytes)')

w2 = make_week(2,['yt2','yt4'],['short3','short4'],bdir,tmpl,client_name,cycle_id,'April 27 - May 2, 2026',upload_url,cdata)
out2 = bdir/'weekly_scripts_week2.html'
out2.write_text(w2)
print(f'Week 2: {out2} ({len(w2):,} bytes)')
