import { useEffect } from 'react';
import { PermissionsAndroid, Platform } from 'react-native';
import PushNotification, { Importance } from 'react-native-push-notification';

type ChannelInformationsType = {
  channelId: string;
  channelName: string;
  channelDescription: string;
};

export function useNotification(
  notificationId: string,
  channelInformations: ChannelInformationsType
) {
  useEffect(() => {
    async function requestNotificationPermission() {
      if (Platform.OS === 'android' && Platform.Version >= 33) {
        const granted = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS
        );
        if (granted !== PermissionsAndroid.RESULTS.GRANTED) {
          console.log('Permission de notification refusée');
        }
      }
    }

    requestNotificationPermission();

    console.log('Initialisation des notifications');

    PushNotification.configure({
      onRegister: function (token) {
        console.log('TOKEN:', token);
      },
      onNotification: function (notification) {
        console.log('NOTIFICATION:', notification);
      },
      permissions: {
        alert: true,
        badge: true,
        sound: true,
      },
      popInitialNotification: true,
      requestPermissions: Platform.OS === 'ios',
    });

    if (Platform.OS === 'android') {
      PushNotification.createChannel(
        {
          ...channelInformations,
          vibrate: true,
          importance: Importance.HIGH,
        },
        (created) => console.log(`Canal créé avec succès : ${created}`)
      );
    }

    PushNotification.localNotification({
      channelId: 'timerChannel',
      id: 'timer',
      title: 'Hello',
      message: 'My Notification Message',
      playSound: false,
      vibrate: false,
      ongoing: true,
      priority: 'high',
      importance: 'high',
    });
  }, []);

  function updateNotification(title: string, message: string) {
    PushNotification.localNotification({
      channelId: channelInformations.channelId,
      id: parseInt(notificationId),
      title,
      message,
      playSound: false,
      vibrate: false,
      ongoing: true,
      priority: 'high',
      importance: 'high',
      onlyAlertOnce: true,
    });
  }

  function cancelNotification() {
    PushNotification.cancelLocalNotification(notificationId);
  }

  return { updateNotification, cancelNotification };
}
