"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4663],{2373:(e,t,a)=>{a.d(t,{U:()=>_});var i=a(2115),r=a(283),s=a(2099);let o=()=>{try{let e="__localStorage_test__";return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch(e){return!1}},d=e=>({media_id:"string"==typeof e.id?parseInt(e.id,10):e.id,media_type:e.media_type,title:"movie"===e.media_type?e.title:e.name,poster_path:e.poster_path||void 0,overview:e.overview,release_date:"movie"===e.media_type?e.release_date:e.first_air_date,vote_average:e.vote_average,backdrop_path:e.backdrop_path||void 0,genre_ids:e.genre_ids||[]}),l=e=>{let t={id:e.media_id,poster_path:e.poster_path||null,overview:e.overview||"",vote_average:e.vote_average||0,backdrop_path:e.backdrop_path||null,genre_ids:e.genre_ids||[],media_type:e.media_type};return"movie"===e.media_type?{...t,title:e.title,release_date:e.release_date||"",media_type:"movie"}:{...t,name:e.title,first_air_date:e.release_date||"",media_type:"tv"}},_=()=>{let{user:e}=(0,r.A)(),[t,a]=(0,i.useState)([]),[_,c]=(0,i.useState)([]),[n,p]=(0,i.useState)(!0),[m,h]=(0,i.useState)(!1),u=o();(0,i.useEffect)(()=>{u?h(!1):e&&h(!0)},[u,e]);let w=(0,i.useCallback)(async()=>{p(!0);try{if(m){if(e){let[t,i]=await Promise.all([s.N.from("watchlist").select("*").eq("user_id",e.id).order("created_at",{ascending:!1}),s.N.from("watch_history").select("*").eq("user_id",e.id).order("watched_at",{ascending:!1})]);if(t.error)throw t.error;if(i.error)throw i.error;a(t.data||[]),c(i.data||[])}}else{let e=localStorage.getItem("watchlist"),t=localStorage.getItem("watchHistory");a(e?JSON.parse(e):[]),c(t?JSON.parse(t):[])}}catch(e){a([]),c([])}finally{p(!1)}},[m,e]),y=(0,i.useCallback)(async t=>{try{m?e&&a(t):(localStorage.setItem("watchlist",JSON.stringify(t)),a(t))}catch(e){}},[m,e]),f=(0,i.useCallback)(async t=>{try{m?e&&c(t):(localStorage.setItem("watchHistory",JSON.stringify(t)),c(t))}catch(e){}},[m,e]),g=(0,i.useCallback)(async i=>{try{let r="media_id"in i?i:d(i),o={...r,id:crypto.randomUUID(),created_at:new Date().toISOString()};if(m){if(e){let{error:i}=await s.N.from("watchlist").insert({user_id:e.id,media_id:r.media_id,media_type:r.media_type,title:r.title,poster_path:r.poster_path,overview:r.overview,release_date:r.release_date});if(i)throw i;a([o,...t])}}else{let e=[o,...t];await y(e)}}catch(e){throw e}},[t,y,m,e]),v=(0,i.useCallback)(async(i,r)=>{try{let o="string"==typeof i?parseInt(i,10):i;if(m){if(e){let{error:i}=await s.N.from("watchlist").delete().eq("user_id",e.id).eq("media_id",o).eq("media_type",r);if(i)throw i;let d=t.filter(e=>e.media_id!==o||e.media_type!==r);a(d)}}else{let e=t.filter(e=>e.media_id!==o||e.media_type!==r);await y(e)}}catch(e){throw e}},[t,y,m,e]),S=(0,i.useCallback)(async t=>{try{let a={...t,id:crypto.randomUUID(),watched_at:new Date().toISOString(),created_at:new Date().toISOString()};if(m){if(e){let{error:i}=await s.N.from("watch_history").insert({user_id:e.id,media_id:t.media_id,media_type:t.media_type,title:t.title,poster_path:t.poster_path,season_number:t.season_number,episode_number:t.episode_number,progress:t.progress});if(i)throw i;c([a,..._])}}else{let e=[a,..._];await f(e)}}catch(e){throw e}},[_,f,m,e]),b=(0,i.useCallback)(async(t,a,i,r,o)=>{try{if(m){if(e){let{error:d}=await s.N.from("watch_history").upsert({user_id:e.id,media_id:t,media_type:a,season_number:r,episode_number:o,progress:i,watched_at:new Date().toISOString()});if(d)throw d;await w()}}else{let e,s=_.findIndex(e=>e.media_id===t&&e.media_type===a&&e.season_number===r&&e.episode_number===o);s>=0?(e=[..._])[s]={...e[s],progress:i,watched_at:new Date().toISOString()}:e=[{id:crypto.randomUUID(),media_id:t,media_type:a,title:"".concat(a," ").concat(t),progress:i,season_number:r,episode_number:o,watched_at:new Date().toISOString(),created_at:new Date().toISOString()},..._],await f(e)}}catch(e){throw e}},[_,f,m,e,w]),I=(0,i.useCallback)(async()=>{try{if(m){if(e){let{error:t}=await s.N.from("watchlist").delete().eq("user_id",e.id);if(t)throw t;a([])}}else localStorage.setItem("watchlist",JSON.stringify([])),a([])}catch(e){throw e}},[m,e]),k=(0,i.useCallback)((e,a)=>{let i="string"==typeof e?parseInt(e,10):e;return t.some(e=>e.media_id===i&&e.media_type===a)},[t]),N=(0,i.useCallback)((e,t,a,i)=>{let r=_.find(r=>r.media_id===e&&r.media_type===t&&r.season_number===a&&r.episode_number===i);return(null==r?void 0:r.progress)||0},[_]),C=(0,i.useCallback)(async()=>{if(u&&e&&m)try{let t=localStorage.getItem("watchlist"),a=localStorage.getItem("watchHistory");if(t||a){if(t)for(let a of JSON.parse(t))await s.N.from("watchlist").upsert({user_id:e.id,media_id:a.media_id,media_type:a.media_type,title:a.title,poster_path:a.poster_path,overview:a.overview,release_date:a.release_date});if(a)for(let t of JSON.parse(a))await s.N.from("watch_history").upsert({user_id:e.id,media_id:t.media_id,media_type:t.media_type,title:t.title,poster_path:t.poster_path,season_number:t.season_number,episode_number:t.episode_number,progress:t.progress,watched_at:t.watched_at})}}catch(e){}},[u,e,m]);return(0,i.useEffect)(()=>{w()},[w]),(0,i.useEffect)(()=>{e&&!m&&u&&C()},[e,m,u,C]),{watchlist:t.map(l),rawWatchlist:t,watchHistory:_,isLoading:n,useSupabase:!u&&!!e,storageType:m?"supabase":"localStorage",addToWatchlist:g,removeFromWatchlist:v,clearWatchlist:I,isInWatchlist:k,addToWatchHistory:S,updateWatchProgress:b,getWatchProgress:N,loadData:w,syncData:C}}},2690:(e,t,a)=>{function i(e){return e&&"string"==typeof e?e.toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-").replace(/-+/g,"-").trim():"untitled"}function r(e,t){let a=i(t);return"/movie/".concat(e,"/").concat(a)}function s(e,t){let a=i(t);return"/tv/".concat(e,"/").concat(a)}a.d(t,{GV:()=>r,pK:()=>s})},9434:(e,t,a)=>{a.d(t,{cn:()=>s});var i=a(2596),r=a(9688);function s(){for(var e=arguments.length,t=Array(e),a=0;a