//
//  IMMobApi.h
//  IMMobApi
//
//  Created by Wangjun on 16/1/24.
//  Copyright © 2016年 Wangjun. All rights reserved.
//


#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

#define XcodeAppVersion [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]

/**
 默认使用IM_BATCH策略。
 */
typedef enum {
    IM_REALTIME = 0,       //实时发送
    IM_BATCH = 1,          //启动发送
    IM_SEND_INTERVAL = 2,  //最小间隔发送           ([90-86400]s, default 90s)
} IMReportPolicy;


@interface IMMobApi : NSObject <UIAlertViewDelegate>


#pragma mark basics

///---------------------------------------------------------------------------------------
/// @name  设置
///---------------------------------------------------------------------------------------

/** 设置是否打印sdk的log信息, 默认NO(不打印log).
 @param value 设置为YES,SDK 会输出log信息可供调试参考. 除非特殊需要，否则发布产品时需改回NO.
 @return void.
 */
+ (void)setLogEnabled:(BOOL)value;

/** 设置app版本号。iimedia提取的是Build号(CFBundleVersion)，
 如果需要和App Store上的版本一致,请调用此方法。
 @param appVersion 版本号，例如设置成`XcodeAppVersion`.
 @return void.
 */
+ (void)setAppVersion:(NSString *)appVersion;

///---------------------------------------------------------------------------------------
/// @name  开启统计
///---------------------------------------------------------------------------------------

/** 初始化iimedia统计模块
 @param appKey bjx.iimedia.cn网站申请到的app_id.
 @return void
 */
+ (void)startWithAppkey:(NSString *)appKey;

/** 初始化iimedia统计模块
 @param appKey bjx.iimedia.cn网站申请到的app_id.
 @param reportPolicy 发送策略, 默认值为：BATCH，即“启动发送”模式，目前只支持这种模式。
 @param channelId 渠道名称,为nil或@""时, 默认为@"App Store"渠道
 @return void
 */
+ (void)startWithAppkey:(NSString *)appKey reportPolicy:(IMReportPolicy)rp channelId:(NSString *)cid;

///---------------------------------------------------------------------------------------
/// @name  页面统计
///---------------------------------------------------------------------------------------

/** 手动页面时长统计, 记录某个页面展示的时长.
 @param pageName 统计的页面名称.
 @param seconds 单位为秒，int型.
 @return void.
 */
+ (void)logPageView:(NSString *)pageName seconds:(int)seconds;

/** 自动页面时长统计, 开始记录某个页面展示时长.
 使用方法：必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计，若只调用某一个函数不会生成有效数据。
 在该页面展示时调用beginLogPageView:，当退出该页面时调用endLogPageView:
 @param pageName 统计的页面名称.
 @return void.
 */
+ (void)beginLogPageView:(NSString *)pageName;

/** 自动页面时长统计, 结束记录某个页面展示时长.
 使用方法：必须配对调用beginLogPageView:和endLogPageView:两个函数来完成自动统计，若只调用某一个函数不会生成有效数据。
 在该页面展示时调用beginLogPageView:，当退出该页面时调用endLogPageView:
 @param pageName 统计的页面名称.
 @return void.
 */
+ (void)endLogPageView:(NSString *)pageName;


///---------------------------------------------------------------------------------------
/// @name  行为统计
///---------------------------------------------------------------------------------------
/**
 纪录用户的行为用户做了那些操作
 系统会把所有的行为数据拼接
 最后往服务器发送统计的数据实现统计
 */

/**
 记录用户行为
 key的长度不能超过64，value的长度不能超过128（key ,value只支持英文大小写＋数字＋“_”）
 */
+(void)userActionKey:(NSString *)key Value:(NSString *)value;



///---------------------------------------------------------------------------------------
/// @name  耗时统计
///---------------------------------------------------------------------------------------
/**
 纪录耗时（例如访问某个网站耗时）
 系统会把所有的数据拼接
 最后往服务器发送统计的数据实现统计
 */


/**
 纪录开始请求时间
 */
+(void)beginRequePerformance;

/**
 耗时结束时记录请求
 key的长度不能超过64，value的长度不能超过128（key value只支持英文大小写＋数字＋“_”）
 */
+(void)endRequePerformanceKey:(NSString *)key Value:(NSString *)value;


///---------------------------------------------------------------------------------------
/// @name  手动统计
///---------------------------------------------------------------------------------------

/**
 手动统计（往服务器发送统计的数据）
 开始统计用户行为
 发送请求后自动删除已经统计的数据
 */
+(void)sendHttpRequeUserAction;





/**
 手动统计（往服务器发送统计的数据）
 开始统计请求接口耗时
 发送请求后自动删除已经统计的数据
 */
+(void)sendHttpRequePerformance;




///---------------------------------------------------------------------------------------
/// @name Utility函数
///---------------------------------------------------------------------------------------

/** 判断设备是否越狱，依据是否存在apt和Cydia.app
 */
+ (BOOL)isJailbroken;

/** 判断App是否被破解
 */
+ (BOOL)isPirated;


///---------------------------------------------------------------------------------------
/// 获取存储的信息
///--------------------------------------------------------------------------------------
/**
 获取当前时间
 */
+(NSString *)getNowTime;

/**
 获取用户行为所有数据
 */
+(NSString *)HttpRequeUserAction;

/**
 获取接口请求耗时所有数据
 */
+(NSString *)HttpRequePerformance;

@end
