erDiagram
%%========== ENTITIES ==========%%
PROJECT {
  UUID uuid PK
  STRING name
  DATE creation_date
  DATE last_modified_date
}

TIMELINE {
  UUID uuid PK
  STRING duration
  STRING playhead_position
  BOOLEAN snap_enabled
}

AUDIO_TRACK {
  UUID uuid PK
  FLOAT volume
  BOOLEAN mute
  STRING track_name
  DATETIME created_at
  DATETIME updated_at
}

VIDEO_TRACK {
  UUID uuid PK
  UUID timeline_id FK
  INTEGER layer
  FLOAT opacity
  DATETIME created_at
  DATETIME updated_at
}

CLIP {
  UUID uuid PK
  STRING source_file
  STRING start_time
  STRING end_time
  UUID video_track_id FK
  UUID audio_track_id FK
}

VIDEO_EFFECT {
  UUID uuid PK
  STRING type
  JSON parameters
  DATETIME created_at
  DATETIME updated_at
}

AUDIO_EFFECT {
  UUID uuid PK
  STRING type
  TEXT parameters
  DATETIME created_at
  DATETIME updated_at
}

TRANSITION {
  UUID uuid PK
  STRING type
  STRING duration
  UUID clip_id FK
  DATETIME created_at
}

KEYFRAME {
  UUID uuid PK
  STRING time
  STRING value
  UUID clip_id FK
  DATETIME created_at
}

TIMECODE {
  UUID uuid PK
  STRING time
  UUID clip_id FK
  DATETIME created_at
}

MEDIA_LIBRARY {
  UUID uuid PK
  STRING name
  DATETIME created_at
  DATETIME updated_at
  UUID project_id FK
}

MEDIA_FILE {
  UUID uuid PK
  UUID library_id FK
  STRING file_name
  STRING file_path
  STRING file_type
  FLOAT file_size
  DATETIME uploaded_at
}

MEDIA_CATEGORY {
  UUID uuid PK
  STRING name
  STRING description
}

MEDIA_FILE_CATEGORY {
  UUID file_uuid PK
  UUID category_uuid PK
}

%%========== RELATIONSHIPS ==========%%

PROJECT ||--|{ TIMELINE : contains
PROJECT ||--|{ MEDIA_LIBRARY : contains

TIMELINE ||--|{ VIDEO_TRACK : contains
TIMELINE ||--|{ AUDIO_TRACK : contains

VIDEO_TRACK ||--|{ CLIP : contains
AUDIO_TRACK ||--|{ CLIP : contains

CLIP ||--|{ VIDEO_EFFECT : applies
CLIP ||--|{ AUDIO_EFFECT : applies
CLIP ||--|{ TRANSITION : uses
CLIP ||--|{ KEYFRAME : references
CLIP ||--|{ TIMECODE : references

MEDIA_LIBRARY ||--|{ MEDIA_FILE : contains
MEDIA_FILE ||--|{ MEDIA_FILE_CATEGORY : tagged
MEDIA_CATEGORY ||--|{ MEDIA_FILE_CATEGORY : tagged
