/**
 * iOS implementation of the DailyNotification plugin
 * @module DailyNotificationIOS
 */

import { Capacitor } from '@capacitor/core';
import { registerPlugin } from '@capacitor/core';
import type { DailyNotificationPlugin, DailyNotificationOptions, PermissionStatus } from '../definitions';

// Get the registered native plugin
const DailyNotification = registerPlugin<DailyNotificationPlugin>('DailyNotification');

export class DailyNotificationIOS implements DailyNotificationPlugin {
  private options: DailyNotificationOptions = {
    url: '',
    notificationTime: '09:00',
    title: 'Daily Update',
    body: 'Your daily notification is ready'
  };

  /**
   * Initialize the daily notification system for iOS
   * @param options Configuration options for the notification system
   */
  async initialize(options: DailyNotificationOptions): Promise<void> {
    if (Capacitor.getPlatform() !== 'ios') {
      throw new Error('This implementation is for iOS only');
    }
    this.options = options;
    // Delegate to native plugin configure method
    await DailyNotification.configure({
      dbPath: undefined,
      retentionDays: undefined,
      activeDidIntegration: undefined
    });
  }

  /**
   * Check current permission status for notifications and background refresh
   * @returns Current permission status
   */
  async checkPermissions(): Promise<PermissionStatus> {
    if (Capacitor.getPlatform() !== 'ios') {
      throw new Error('This implementation is for iOS only');
    }
    // Delegate to native plugin permission check
    const status = await DailyNotification.getNotificationPermissionStatus();
    return {
      notifications: status.authorized ? 'granted' : status.denied ? 'denied' : 'prompt',
      backgroundRefresh: 'prompt' // Cannot check programmatically on iOS
    };
  }

  /**
   * Request notification and background refresh permissions from the user
   * @returns Updated permission status after request
   */
  async requestPermissions(): Promise<PermissionStatus> {
    if (Capacitor.getPlatform() !== 'ios') {
      throw new Error('This implementation is for iOS only');
    }
    // Delegate to native plugin permission request
    await DailyNotification.requestNotificationPermissions();
    // Return updated status
    return this.checkPermissions();
  }
} 