1import{s as u}from"./App-Ca4m7kiA.js";import"./vendor-capacitor-DBH9BLG3.js";import"./vendor-ui-B72TISsr.js";import"./vendor-react-DRDp5jUv.js";import"./vendor-supabase-D_kvcy1s.js";import"./SecureStorageService-CZimPf89.js";import"./hideNativeSplash-CUK-rfN2.js";async function c(r){try{const{data:i,error:s}=await u.rpc("get_user_active_subscription",{user_uuid:r});if(s){console.error("Error fetching user subscription status:",s);const t=await o();return t?{isPremium:!1,status:"free",planFeatures:t}:null}if(!i||i.length===0){console.warn("No subscription data returned, fetching free plan directly");const t=await o();return t?{isPremium:!1,status:"free",planFeatures:t}:null}const e=i[0];if(!e||!e.plan_features){console.warn("Subscription data missing plan_features, using free plan");const t=await o();return t?{isPremium:!1,status:"free",planFeatures:t}:null}return{isPremium:!(e.stripe_price_id==="free"||e.plan_name==="Free"||e.status==="free")&&(e.status==="active"||e.status==="trialing"||e.status==="canceled"&&e.current_period_end&&new Date(e.current_period_end)>new Date),status:e.status||"free",planFeatures:e.plan_features,paymentProvider:e.payment_provider||void 0,stripePriceId:e.stripe_price_id,iosProductId:e.ios_product_id}}catch(i){console.error("Exception fetching user subscription status:",i);const s=await o();return s?{isPremium:!1,status:"free",planFeatures:s}:null}}async function g(r){return(await c(r))?.planFeatures||null}async function o(){try{const{data:r,error:i}=await u.from("subscription_plans").select("features").eq("stripe_price_id","free").eq("is_active",!0).single();return i||!r?(console.error("Error fetching free plan:",i),{teams:1,team_memberships:3,ai_credits:10}):r.features}catch(r){return console.error("Exception fetching free plan:",r),{teams:1,team_memberships:3,ai_credits:10}}}async function P(r){return l(r)}async function l(r){const i=await c(r);if(!i)return{allowed:!1,reason:"Unable to determine subscription status"};const{isPremium:s,planFeatures:e}=i;if(e.team_memberships===-1)return{allowed:!0};const{count:n,error:a}=await u.from("team_memberships").select("*",{count:"exact",head:!0}).eq("member_id",r);if(a)return console.error("Error counting team memberships:",a),{allowed:!1,reason:"Error checking team membership count"};const t=n||0;return t>=e.team_memberships?{allowed:!1,reason:`${s?"Premium":"Free"} plan team membership limit reached (${e.team_memberships} teams)`,currentUsage:t,limit:e.team_memberships}:{allowed:!0,currentUsage:t,limit:e.team_memberships}}async function F(r){const i=await c(r);if(!i)return{allowed:!1,reason:"Unable to determine subscription status",isFreePlan:!1};const{isPremium:s,planFeatures:e}=i;if(e.ai_credits===-1)return{allowed:!0,isFreePlan:!s};const{data:n,error:a}=await u.rpc("check_and_enforce_limit",{user_uuid:r,metric_name:"ai_credits",limit_value:e.ai_credits});if(a)return console.error("Error checking AI credit limit:",a),{allowed:!1,reason:"Error checking AI credit limit",isFreePlan:!1};const t=n?.[0];return t?t.allowed?{allowed:!0,currentUsage:t.current_usage,limit:t.limit_val,isFreePlan:!s}:{allowed:!1,reason:"You've used up your AI credits on your current plan.",currentUsage:t.current_usage,limit:t.limit_val,isFreePlan:!s}:{allowed:!1,reason:"Unable to check AI credit limit",isFreePlan:!1}}function y(r){return r===-1?"Unlimited":r.toLocaleString()}export{P as canCreateTeam,l as canJoinTeam,F as canUseAICredit,y as formatLimit,g as getUserLimits,c as getUserSubscriptionStatus};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.