import { NativeModules, NativeEventEmitter } from 'react-native';

export const RNSnapchatKit = NativeModules.SnapchatKit;
export const RNSnapchatKitEmitter = new NativeEventEmitter(RNSnapchatKit);

export default class SnapchatKit {
  static login() {
    return new Promise((resolve, reject) => {
      RNSnapchatKit.login()
        .then((result) => {
          if(result.error) {
            reject(result.error);
          } else { 
            this.getUserInfo()
              .then(resolve)
              .catch(reject);
          }
        })
        .catch(e => reject(e)); 
    });
  }

  static async isLogged() {
    const { result } = await RNSnapchatKit.isUserLoggedIn();
    return result;
  }

  static async logout() {
    const { result } = await RNSnapchatKit.logout();
    return result;
  }

  static getUserInfo() {
    return new Promise((resolve, reject) => {
      RNSnapchatKit.fetchUserData()
        .then(async (tmp) => {
          const data = tmp;
          if (data === null) {
            resolve(null);
          } else {
            const res = await RNSnapchatKit.getAccessToken();
            data.accessToken = res.accessToken;
            resolve(data);
          }
        })
        .catch(e => { reject(e) });
    });
  }

  static async sharePhoto(photoImageSourceOrUrl, stickerImageSourceOrUrl, stickerPosX, stickerPosY, attachmentUrl, caption) {
	const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource');

	const resolvedPhoto = resolveAssetSource(photoImageSourceOrUrl);
	const resolvedSticker = resolveAssetSource(stickerImageSourceOrUrl);

	const { result } = await RNSnapchatKit.sharePhotoResolved(
		resolvedPhoto, resolvedPhoto == null ? photoImageSourceOrUrl : null, 
		resolvedSticker, resolvedSticker == null ? stickerImageSourceOrUrl : null, 
		stickerPosX, stickerPosY, 
		attachmentUrl, 
		caption).catch(e => { reject(e) });

    return result;
  }


  static async shareVideoAtUrl(videoUrl, stickerImageSourceOrUrl, stickerPosX, stickerPosY, attachmentUrl, caption) {
    const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource');

	const resolvedSticker = resolveAssetSource(stickerImageSourceOrUrl);

	const { result } = await RNSnapchatKit.shareVideoAtUrl(
		videoUrl, 
		resolvedSticker, resolvedSticker == null ? stickerImageSourceOrUrl : null, 
		stickerPosX, stickerPosY, 
		attachmentUrl, 
		caption).catch(e => { reject(e) });

    return result;
  }

}