-- Ruajtja e skedarëve.
--   covers: bucket publik (kopertinat nuk janë të ndjeshme)
--   audio:  bucket PRIVAT; klienti merr vetëm URL të nënshkruara me jetë të shkurtër
-- content_items.audio_path / cover_path ruajnë rrugën brenda bucket-it (pa emrin e bucket-it).
-- Kufiri i madhësisë së skedarit varet nga plani i Supabase; verifikoje para ngarkimit të librave të gjatë.

insert into storage.buckets (id, name, public, allowed_mime_types)
values
  ('covers', 'covers', true, array['image/jpeg', 'image/png', 'image/webp']),
  ('audio', 'audio', false, array['audio/mpeg', 'audio/mp4', 'audio/x-m4a', 'audio/aac'])
on conflict (id) do nothing;

-- Audio: lexohet vetëm kur titulli është i publikuar (ose nga stafi). Drafti dhe titujt e arkivuar nuk nënshkruhen.
create policy audio_read_published on storage.objects for select to authenticated
  using (
    bucket_id = 'audio'
    and (
      public.is_staff()
      or exists (
        select 1 from public.content_items c
        where c.audio_path = storage.objects.name and c.status = 'published'
      )
    )
  );

create policy media_staff_read on storage.objects for select to authenticated
  using (bucket_id in ('audio', 'covers') and public.is_staff());

create policy media_staff_insert on storage.objects for insert to authenticated
  with check (bucket_id in ('audio', 'covers') and public.is_staff());

create policy media_staff_update on storage.objects for update to authenticated
  using (bucket_id in ('audio', 'covers') and public.is_staff())
  with check (bucket_id in ('audio', 'covers') and public.is_staff());

create policy media_admin_delete on storage.objects for delete to authenticated
  using (bucket_id in ('audio', 'covers') and public.is_admin());
