// Built-in timeline templates. Each template is a small preset project
// that the user can apply to get a starting structure for their videos.
// Templates don't carry assets — they only configure tracks + clips +
// text overlays.

import type { Clip, TextOverlay, Track } from '@/types';
import { initialTracks } from '@/store/editor/types';

export interface Template {
  id: string;
  name: string;
  emoji: string;
  description: string;
  durationSec: number;
  tracks?: Track[];
  clips?: Clip[];
  textOverlays?: TextOverlay[];
  /** Number of dummy placeholder slots to render in preview. */
  placeholders?: { label: string; color: string }[];
}

const dummyClip = (i: number, trackId: string, start: number, dur: number, label: string): Clip => ({
  id: `tpl-c${i}`,
  assetId: `__placeholder_${i}`,
  trackId,
  start,
  duration: dur,
  sourceIn: 0,
});

const placeholderText = (id: string, idx: number, text: string, start: number, dur: number, yRatio: number): TextOverlay => ({
  id,
  trackId: 'overlay',
  text,
  start,
  duration: dur,
  fontFamily: 'sans-serif',
  fontSize: 64,
  bold: true,
  italic: false,
  color: '#ffffff',
  backgroundColor: '#00000088',
  opacity: 1,
  xRatio: 0.5,
  yRatio,
  animation: 'fade',
});

export const TEMPLATES: Template[] = [
  {
    id: 'blank',
    name: 'โปรเจกต์เปล่า',
    emoji: '📄',
    description: 'เริ่มจากศูนย์ — มี 3 แทร็กวิดีโอ + 2 แทร็กเสียง',
    durationSec: 0,
    placeholders: [],
  },
  {
    id: 'intro',
    name: 'อินโทร YouTube',
    emoji: '🎬',
    description: 'วิดีโอ 15 วินาที + ข้อความไตเติ้ล',
    durationSec: 15,
    placeholders: [
      { label: 'วิดีโอหลัก (15s)', color: '#3aa6ff' },
      { label: 'ข้อความ Title', color: '#ff8a3d' },
    ],
    textOverlays: [placeholderText('tpl-intro-1', 1, 'พร้อมใส่ชื่อช่อง YouTube ของคุณ', 0.5, 14, 0.45)],
  },
  {
    id: 'beat-drop',
    name: 'Beat Drop',
    emoji: '🥁',
    description: 'วิดีโอ 8 วินาที + ข้อความ BEAT ตรงกลาง',
    durationSec: 8,
    placeholders: [
      { label: 'คลิปวิดีโอ', color: '#3aa6ff' },
      { label: 'ข้อความ BEAT', color: '#ff3d6e' },
    ],
    textOverlays: [
      placeholderText('tpl-beat-1', 1, 'BEAT', 1, 6, 0.4),
      placeholderText('tpl-beat-2', 2, 'DROP', 6, 2, 0.5),
    ],
  },
  {
    id: 'outro',
    name: 'เอาท์โทร YouTube',
    emoji: '👋',
    description: 'วิดีโอ 10 วินาที + ข้อความ "กดไลก์ + Subscribe"',
    durationSec: 10,
    placeholders: [
      { label: 'คลิปวิดีโอ', color: '#3aa6ff' },
      { label: 'ข้อความ Subscribe', color: '#ffb84d' },
    ],
    textOverlays: [
      placeholderText('tpl-out-1', 1, '👍 กดไลก์ & Subscribe', 1, 4, 0.5),
      placeholderText('tpl-out-2', 2, 'คลิปหน้าเจอกัน!', 5, 4, 0.6),
    ],
  },
  {
    id: 'split-pip',
    name: 'หน้าจอแยก (PIP)',
    emoji: '🖼️',
    description: '3 แทร็กวิดีโอ PIP มาตรฐาน',
    durationSec: 30,
    placeholders: [
      { label: 'วิดีโอหลัก (เต็มจอ)', color: '#3aa6ff' },
      { label: 'วิดีโอ PIP ล่างขวา', color: '#3aa6ff' },
      { label: 'วิดีโอ PIP บนซ้าย', color: '#3aa6ff' },
    ],
  },
];

/** Apply a template by replacing the current tracks/clips/textOverlays. */
export function applyTemplate(
  templateId: string,
  apply: (tracks: Track[], clips: Clip[], textOverlays: TextOverlay[]) => void,
) {
  const tpl = TEMPLATES.find((t) => t.id === templateId);
  if (!tpl) return;
  // For "blank" we use the project's initial tracks and clear everything else.
  if (tpl.id === 'blank') {
    apply([...initialTracks], [], []);
    return;
  }
  // For others we start with the default 5 tracks and add overlay tracks for any text overlays.
  const tracks = initialTracks.map((t) => ({ ...t }));
  apply(tracks, [], tpl.textOverlays ?? []);
}
