//  This file is part of the PhotoEditor Software Development Kit.
//  Copyright (C) 2016-2017 9elements GmbH <contact@9elements.com>
//  All rights reserved.
//  Redistribution and use in source and binary forms, without
//  modification, are permitted provided that the following license agreement
//  is approved and a legal/financial contract was signed by the user.
//  The license agreement can be found under the following link:
//  https://www.photoeditorsdk.com/LICENSE.txt

#import <Foundation/Foundation.h>

// Note: Unfortunately there is no way to expose a Swift struct or enum (backed by Strings) to
// Objective-C, which is why defining this as constants in Objective-C with NS_EXTENSIBLE_STRING_ENUM
// is the best way to go for now.

typedef NSString *PESDKAnalyticsScreenViewName NS_EXTENSIBLE_STRING_ENUM;
typedef NSString *PESDKAnalyticsEventName NS_EXTENSIBLE_STRING_ENUM;
typedef NSString *PESDKAnalyticsEventAttributeName NS_EXTENSIBLE_STRING_ENUM;
typedef NSString *PESDKAnalyticsEventAttributeValue NS_EXTENSIBLE_STRING_ENUM;

#pragma mark - Screen View Constants

extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameCamera;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameEditor;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameTransform;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameFilter;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameOverlay;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameAdjust;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameTextAdd;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameText;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameTextFont;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameTextFontColor;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameTextBackgroundColor;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameStickerAdd;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameSticker;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameStickerColor;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameFrame;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameBrush;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameBrushColor;
extern PESDKAnalyticsScreenViewName const PESDKAnalyticsScreenViewNameFocus;

#pragma mark - Event Constants

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameApplyChanges;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameDiscardChanges;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameCameraFlashSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameCameraPositionSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameCameraPhotoRollSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameCameraRecordingModeChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameCameraTakePhoto;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameCameraRecordVideo;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameCameraShowFilter;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameCameraHideFilter;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFilterSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFilterIntensityChange;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameOverlaySelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameOverlayIntensityChange;


extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameAutoEnhancementOn;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameAutoEnhancementOff;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNamePhotoEditOverlayActionSelect;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTransformCropRectChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTransformFlip;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTransformRotate;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTransformStraightenAngleChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTransformAspectRatioSelect;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameAdjustOptionChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameAdjustValueChange;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameStickerSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameStickerCategorySelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameStickerActionSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameStickerRectChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameStickerRotationChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameStickerColorChange;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFrameSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFrameDeselect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFrameActionSelect;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameBrushActionSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameBrushOptionChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameBrushValueChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameBrushColorChange;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextActionSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextEdit;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextRectChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextFontSizeChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextRotationChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextFontFullscreenEnter;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextFontFullscreenExit;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextFontSelect;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextFontColorChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameTextBackgroundColorChange;

extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFocusFadeWidthChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFocusBlurRadiusChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFocusControlPointsChange;
extern PESDKAnalyticsEventName const PESDKAnalyticsEventNameFocusOptionChange;

#pragma mark - Event Attributes

extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameFlashMode;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameCameraPosition;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameRecordingMode;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameFilterType;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameFilterIntensity;

extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameOverlayType;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameOverlayIntensity;

extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameCropRect;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameStraightenAngle;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameAspectRatio;

extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameOption;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameValue;

extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameSticker;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameStickerCategory;

extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameFont;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameColor;

extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameFrame;
extern PESDKAnalyticsEventAttributeName const PESDKAnalyticsEventAttributeNameAction;

extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueFlashOff;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueFlashOn;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueFlashAuto;

extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueCameraPositionFront;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueCameraPositionBack;

extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueRecordingModePhoto;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueRecordingModeVideo;

extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueAdjustOptionBrightness;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueAdjustOptionContrast;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueAdjustOptionSaturation;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueAdjustOptionClarity;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueAdjustOptionShadows;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueAdjustOptionHighlights;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueAdjustOptionExposure;

extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueActionAdd;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueActionAlignment;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueActionFlip;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueActionStraighten;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueActionUndo;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueActionRedo;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueActionBringToFront;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueActionDelete;

extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueBrushOptionSize;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueBrushOptionHardness;

extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueFocusOptionNone;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueFocusOptionLinear;
extern PESDKAnalyticsEventAttributeValue const PESDKAnalyticsEventAttributeValueFocusOptionRadial;
