#!/usr/bin/env python3
"""
DAS Reshare — reshare video DAS yang SUDAH ADA di Repliz (konten FB DAS, sumber TikTok)
ke akun DAS lainnya di Repliz (DAS INDONESIA = Threads/IG).
Tanpa download, tanpa upload ulang — pakai URL video asli dari Repliz.
1 video/hari, jam 17:00 WIB, mulai besok.
"""
import json, os, re, sys
from datetime import datetime, timedelta, timezone

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from repliz_client import ReplizClient, ACC

WIB = timezone(timedelta(hours=7))
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
HIST_FILE = os.path.join(BASE_DIR, 'das_crosspost_history.json')

DAS_FB = ACC.DAS_FB            # sumber konten (FB DAS)
DAS_THREADS = ACC.DAS_THREADS  # target reshare (DAS INDONESIA)

POST_TIME = "17:00"  # WIB


def ringkas_caption(desc: str, max_len: int = 480) -> str:
    """Buang hashtag, rapikan, potong di batas kalimat kalau kepanjangan."""
    text = re.sub(r'#\w+', '', desc)
    text = re.sub(r'\s+', ' ', text).strip()
    if len(text) <= max_len:
        return text
    cut = text[:max_len]
    last = cut.rfind('. ')
    if last > max_len * 0.6:
        return cut[:last + 1]
    last_space = cut.rfind(' ')
    return cut[:last_space] + "…"


def load_json(path, default):
    if os.path.exists(path):
        with open(path) as f:
            return json.load(f)
    return default


def save_json(path, data):
    with open(path, 'w') as f:
        json.dump(data, f, indent=2, ensure_ascii=False)


def get_das_videos(client):
    """Ambil semua konten video dari akun FB DAS di Repliz."""
    vids = []
    for page in range(1, 4):
        r = client.get(f'/public/content?accountId={DAS_FB}&page={page}&limit=50')
        docs = r.get('docs', r.get('data', []))
        for d in docs:
            if d.get('type') == 'video':
                media = next((m for m in (d.get('medias') or []) if m.get('type') == 'video'), None)
                if media and media.get('url'):
                    vids.append({
                        'id': d['id'],
                        'desc': d.get('description') or '',
                        'url': media['url'],
                        'thumb': media.get('thumbnail', ''),
                    })
        if len(docs) < 50:
            break
    return vids


def main(dry_run=False, video_ids=None):
    client = ReplizClient()
    vids = get_das_videos(client)
    print(f"📹 Video DAS di Repliz: {len(vids)}")

    hist = load_json(HIST_FILE, {'posts': []})
    used = {p['video_id'] for p in hist['posts']}
    todo = [v for v in vids if v['id'] not in used]
    if video_ids:
        todo = [v for v in todo if v['id'] in video_ids]

    print(f"🎯 Belum di-reshare: {len(todo)} video")
    if not todo:
        print("Semua video sudah pernah di-reshare.")
        return 0

    # mulai besok jam 17:00 WIB, 1 video/hari
    start = datetime.now(WIB) + timedelta(days=1)
    if start.hour >= 17:
        start = start + timedelta(days=1)

    results = {}
    for i, v in enumerate(todo):
        day = start + timedelta(days=i)
        at = f"{day.strftime('%Y-%m-%d')}T{POST_TIME}:00+07:00"
        caption = ringkas_caption(v['desc'])
        print(f"\n📅 {at} WIB — {v['id']}")
        print(f"   Caption ({len(caption)} char): {caption[:100]}…")

        if dry_run:
            print(f"   [DRY-RUN] URL: {v['url'][:80]}…")
            results[v['id']] = '✅'
            continue

        r = client.create_schedule(
            DAS_THREADS, caption, at,
            title="Video DAS", topic="Otomotif", type_="video",
            medias=[{"type": "video", "url": v['url'], "thumbnail": v['thumb']}],
        )
        sid = r.get('scheduleId') or r.get('_id') or r.get('id')
        ok = bool(sid)
        results[v['id']] = '✅' if ok else '❌'
        print(f"   → {'✅' if ok else '❌'} {r}")
        if ok:
            hist['posts'].append({
                'video_id': v['id'],
                'schedule_id': sid,
                'schedule_at': at,
                'video_url': v['url'],
                'caption': caption,
            })
            save_json(HIST_FILE, hist)

    ok_count = sum(1 for v in results.values() if v == '✅')
    print(f"\n🏁 Selesai: {ok_count}/{len(todo)} schedule dibuat")
    return 0


if __name__ == '__main__':
    dry = '--dry-run' in sys.argv
    ids = [a for a in sys.argv[1:] if not a.startswith('--')]
    sys.exit(main(dry_run=dry, video_ids=ids or None))
