from __future__ import annotations

import json
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT))
from configs.kling import ENDPOINTS, V1_MODELS, KlingConfig
from scripts.builders import build_text2video_payload, build_omni_payload, build_extend_payload
from scripts.validators import validate_payload, ValidationError
from scripts.scene_router import choose_endpoint


def main():
    payload1 = build_text2video_payload(prompt='hello')
    payload2 = build_omni_payload(prompt='hello', multi_shot=True, shot_type='customize', multi_prompt=[{'index': 1, 'prompt': 'a', 'duration': '5'}])
    payload3 = build_extend_payload(video_id='123', prompt='continue')
    validate_payload('text2video', payload1)
    validate_payload('omni', payload2)
    validate_payload('extend', payload3)
    err = None
    try:
        validate_payload('text2video', {'prompt':'x','foo':'bar'})
    except ValidationError as e:
        err = str(e)
    out = {
        'ok': True,
        'routes': {
            'text_single': choose_endpoint({'scene_type':'text_single'}),
            'text_multi_shot': choose_endpoint({'scene_type':'text_multi_shot'}),
            'image_single': choose_endpoint({'scene_type':'image_single'}),
            'continuity': choose_endpoint({'scene_type':'continuity'}),
            'extend': choose_endpoint({'scene_type':'text_single','extend_flag':True}),
        },
        'jwt_mode_available': KlingConfig().api_token is None,
        'endpoint_notes': {
            'text2video': ENDPOINTS['text2video'],
            'image2video': ENDPOINTS['image2video'],
            'omni': ENDPOINTS['omni'],
        },
        'model_allowlist': V1_MODELS,
        'invalid_field_error': err,
        'omni_multishot_payload': payload2,
    }
    print(json.dumps(out, ensure_ascii=False, indent=2))

if __name__ == '__main__':
    main()
