import re
import sys
import json

sys.stdout.reconfigure(encoding='utf-8')

def parse_screenplay():
    with open('FilmMaker/TAP_01_XUAN_SAC_THE_NGUYEN_VA_GIONG_BAO_DOAN_TRUONG.md', 'r', encoding='utf-8') as f:
        text = f.read()

    # Find all scenes
    scene_pattern = r'(#### CẢNH \d+:.*?)(?=(?:#### CẢNH \d+:|\Z))'
    scene_matches = list(re.finditer(scene_pattern, text, re.DOTALL))

    scenes_data = []
    total_shots = 0

    shot_regex = re.compile(
        r'##### Shot (\d+): `(ep01_scene(\d+)_shot(\d+))`\s*\((.*?)\)\n'
        r'-\s*\*\*Cỡ cảnh & Máy quay\*\*:\s*(.*?)\n'
        r'-\s*\*\*Thị giác\*\*:\s*(.*?)\n'
        r'(?:-\s*\*\*Âm thanh 4 Stems\*\*:\s*\n(.*?))?'
        r'(?=(?:##### Shot |##### PHÂN ĐOẠN|#### CẢNH |\Z))',
        re.DOTALL
    )

    all_shots = []

    for sm in scene_matches:
        scene_text = sm.group(1)
        scene_header = scene_text.splitlines()[0]
        # find slugline, etc.
        slugline_match = re.search(r'-\s*\*\*Slugline\*\*:\s*`?(.*?)`?\n', scene_text)
        slugline = slugline_match.group(1) if slugline_match else ''
        
        shots = []
        for shot_m in shot_regex.finditer(scene_text):
            shot_num = shot_m.group(1)
            shot_id = shot_m.group(2)
            sc_num = shot_m.group(3)
            sh_num = shot_m.group(4)
            duration = shot_m.group(5)
            camera = shot_m.group(6).strip()
            visual = shot_m.group(7).strip()
            audio_block = shot_m.group(8) or ''

            shots.append({
                'shot_id': shot_id,
                'scene_num': int(sc_num),
                'shot_num': int(sh_num),
                'duration': duration,
                'camera': camera,
                'visual': visual,
                'audio': audio_block.strip()
            })
            all_shots.append(shot_id)

        scenes_data.append({
            'scene_header': scene_header,
            'slugline': slugline,
            'shot_count': len(shots),
            'shots': shots
        })
        total_shots += len(shots)

    print(f"Total scenes: {len(scenes_data)}")
    print(f"Total shots parsed: {total_shots}")
    for idx, sc in enumerate(scenes_data):
        print(f"Scene {idx+1}: {sc['shot_count']} shots (Header: {sc['scene_header'][:50]})")

    return scenes_data

if __name__ == '__main__':
    parse_screenplay()
