/**
 * Plan Features Hook
 *
 * Provides utilities for checking feature availability based on subscription plan.
 */

import { useCurrentBusiness } from './useBusiness';
import { PlanPermissions } from '../types';

export type FeatureKey = keyof PlanPermissions;

export interface PlanFeatureCheck {
  /**
   * Check if a feature is available in the current plan
   */
  canUse: (feature: FeatureKey) => boolean;

  /**
   * Check if any of the features are available
   */
  canUseAny: (features: FeatureKey[]) => boolean;

  /**
   * Check if all of the features are available
   */
  canUseAll: (features: FeatureKey[]) => boolean;

  /**
   * Get the current plan tier
   */
  plan: string | undefined;

  /**
   * All plan permissions
   */
  permissions: PlanPermissions | undefined;

  /**
   * Whether permissions are still loading
   */
  isLoading: boolean;
}

/**
 * Hook to check plan feature availability
 */
export const usePlanFeatures = (): PlanFeatureCheck => {
  const { data: business, isLoading } = useCurrentBusiness();

  const canUse = (feature: FeatureKey): boolean => {
    if (!business?.planPermissions) {
      // Default to false if no permissions loaded yet
      return false;
    }
    return business.planPermissions[feature] ?? false;
  };

  const canUseAny = (features: FeatureKey[]): boolean => {
    return features.some(feature => canUse(feature));
  };

  const canUseAll = (features: FeatureKey[]): boolean => {
    return features.every(feature => canUse(feature));
  };

  return {
    canUse,
    canUseAny,
    canUseAll,
    plan: business?.plan,
    permissions: business?.planPermissions,
    isLoading,
  };
};

/**
 * Feature display names for UI
 */
export const FEATURE_NAMES: Record<FeatureKey, string> = {
  sms_reminders: 'SMS Reminders',
  webhooks: 'Webhooks',
  api_access: 'API Access',
  custom_domain: 'Custom Domain',
  white_label: 'White Label',
  custom_oauth: 'Custom OAuth',
  automations: 'Automations',
  can_create_automations: 'Custom Automation Creation',
  tasks: 'Scheduled Tasks',
  export_data: 'Data Export',
  video_conferencing: 'Video Conferencing',
  two_factor_auth: 'Two-Factor Authentication',
  masked_calling: 'Masked Calling',
  pos_system: 'POS System',
  mobile_app: 'Mobile App',
  contracts: 'Contracts',
  multi_location: 'Multiple Locations',
};

/**
 * Feature descriptions for upgrade prompts
 */
export const FEATURE_DESCRIPTIONS: Record<FeatureKey, string> = {
  sms_reminders: 'Send automated SMS reminders to customers and staff',
  webhooks: 'Integrate with external services using webhooks',
  api_access: 'Access the SmoothSchedule API for custom integrations',
  custom_domain: 'Use your own custom domain for your booking site',
  white_label: 'Remove SmoothSchedule branding and use your own',
  custom_oauth: 'Configure your own OAuth credentials for social login',
  automations: 'Automate repetitive tasks with custom workflows',
  can_create_automations: 'Create custom automations tailored to your business needs',
  tasks: 'Create scheduled tasks to automate execution',
  export_data: 'Export your data to CSV or other formats',
  video_conferencing: 'Add video conferencing links to appointments',
  two_factor_auth: 'Require two-factor authentication for enhanced security',
  masked_calling: 'Use masked phone numbers to protect privacy',
  pos_system: 'Process in-person payments with Point of Sale',
  mobile_app: 'Access SmoothSchedule on mobile devices',
  contracts: 'Create and manage contracts with customers',
  multi_location: 'Manage multiple business locations with separate resources and services',
};
