CREATE TABLE IF NOT EXISTS rsplat.splats (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  slug TEXT NOT NULL UNIQUE,
  title TEXT NOT NULL,
  description TEXT,
  file_path TEXT NOT NULL,
  file_format TEXT NOT NULL DEFAULT 'ply',
  file_size_bytes BIGINT DEFAULT 0,
  tags TEXT[] DEFAULT '{}',
  space_slug TEXT NOT NULL DEFAULT 'demo',
  contributor_id TEXT,
  contributor_name TEXT,
  source TEXT DEFAULT 'upload',
  status TEXT NOT NULL DEFAULT 'published',
  view_count INTEGER DEFAULT 0,
  payment_tx TEXT,
  payment_network TEXT,
  processing_status TEXT DEFAULT 'ready',
  processing_error TEXT,
  source_file_count INTEGER DEFAULT 0,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_splats_space ON rsplat.splats (space_slug);
CREATE INDEX IF NOT EXISTS idx_splats_slug ON rsplat.splats (slug);
CREATE INDEX IF NOT EXISTS idx_splats_status ON rsplat.splats (status);
CREATE INDEX IF NOT EXISTS idx_splats_created ON rsplat.splats (created_at DESC);

-- Source files table (photos/video uploaded for splatting)
CREATE TABLE IF NOT EXISTS rsplat.source_files (
  id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
  splat_id UUID REFERENCES rsplat.splats(id) ON DELETE CASCADE,
  file_path TEXT NOT NULL,
  file_name TEXT NOT NULL,
  mime_type TEXT,
  file_size_bytes BIGINT DEFAULT 0,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE INDEX IF NOT EXISTS idx_source_files_splat ON rsplat.source_files (splat_id);
