package cn.com.ctop.kuaishou.modules.batch.service;


import cn.com.ctop.common.module.entity.CtopOauthToken;
import cn.com.ctop.kuaishou.modules.batch.entity.vo.ConvertVo;
import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResult;
import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResultToken;
import cn.com.ctop.kuaishou.modules.report.entity.*;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author yumeng
 * 2019年11月12日11:08:52
 */
public interface IKuaishouInterfaceService {

    KuaishouResultToken getAccessToken(String authCode, Long appId);


    /**
     * 计划日报
     *
     * @param accessToken
     * @param advertiserId
     * @param startDate
     * @param endDate
     * @param pageSize
     * @param pageNum
     * @return
     */
    KuaishouResult<KuaishouReportDailyCampaign> getCampaignDailyReport(String accessToken, Long advertiserId, String startDate, String endDate, int pageSize, int pageNum);

    /**
     * 计划时报
     *
     * @param accessToken
     * @param advertiserId
     * @param startDate
     * @param endDate
     * @param pageSize
     * @param pageNum
     * @return
     */
    KuaishouResult<KuaishouReportHourlyCampaign> getCampaignHourlyReport(String accessToken, Long advertiserId, String startDate, String endDate, int pageSize, int pageNum);

    /**
     * 组日报
     *
     * @param accessToken
     * @param advertiserId
     * @param startDate
     * @param endDate
     * @param pageSize
     * @param pageNum
     * @return
     */

    /**
     * 组时报
     *
     * @param accessToken
     * @param advertiserId
     * @param startDate
     * @param endDate
     * @param pageSize
     * @param pageNum
     * @return
     */
    KuaishouResult<KuaishouReportHourlyGroup> getGroupHourlyReport(String accessToken, Long advertiserId, String startDate, String endDate, int pageSize, int pageNum);

    /**
     * 创意日报 暂停使用
     *
     * @param accessToken
     * @param advertiserId
     * @param startDate
     * @param endDate
     * @param pageSize
     * @param pageNum
     * @return
     */
    KuaishouResult<KuaishouReportDailyCreative> getCreativeDailyReport(String accessToken, Long advertiserId, String startDate, String endDate, int pageSize, int pageNum);

    /**
     * 创意时报 暂停使用
     *
     * @param accessToken
     * @param advertiserId
     * @param startDate
     * @param endDate
     * @param pageSize
     * @param pageNum
     * @return
     */
    KuaishouResult<KuaishouReportHourlyCreative> getCreativeHourlyReport(String accessToken, Long advertiserId, String startDate, String endDate, int pageSize, int pageNum);


    /**
     * 获取历史数据
     *
     * @param token
     * @throws ParseException
     */
    void loadKuaishouDataSingle(CtopOauthToken token) throws ParseException;

    /**
     * 创建广告计划
     *
     * @param accessToken
     * @param advertiserId
     * @param requestJson
     * @return
     */
    Map<String, Object> campaignCreate(String accessToken, Long advertiserId, JSONObject requestJson);


    /**
     * 创建广告组
     *
     * @param accessToken
     * @param advertiserId
     * @param requestJson
     * @return
     */
    Map<String, Object> adUnitCreate(String accessToken, Long advertiserId, JSONObject requestJson, Integer count);


    /**
     * 获取广告计划信息  单条
     *
     * @param accessToken
     * @param advertiserId
     */
    void getCampaign(String accessToken, Long advertiserId, Long campaignId);


    /**
     * 获取创意列表
     *
     * @param token
     * @param startDate
     * @param endDate
     */
    void getCreativeList(CtopOauthToken token, Date startDate, Date endDate);


    /**
     * 根据组id,获取创意列表
     *
     * @param token
     * @param unitId
     * @param startDate
     * @param endDate
     * @param timeFilterType
     */
    JSONArray getCreativeList(CtopOauthToken token, Long unitId, Date startDate, Date endDate, int timeFilterType);


    /**
     * 获取视频信息
     *
     * @param accessToken
     * @param advertiserId
     * @param photoId
     */
    void getVideoInfo(String accessToken, Long advertiserId, String photoId);


    /**
     * 取可选的深度转化类型
     *
     * @param advertiserId
     * @param accessToken
     * @return
     */
    JSONObject getDeepConversionInfosV2(Long advertiserId, String accessToken, Integer campaignType, Long appId);

    /**
     * 获取浅度转化目标
     *
     * @param advertiserId
     * @param accessToken
     * @param campaignType
     * @param appId
     * @return
     */
    JSONObject conversionInfos(Long advertiserId, String accessToken, Integer sceneCategory, Integer campaignType, JSONArray sceneIds, Long appId);

    /**
     * 深度转化出价
     *
     * @param accountId
     * @param accessToken
     * @param sceneCategory
     * @param campaignType
     * @param sceneIds
     * @param appId
     * @param ocpxActionType
     * @return
     */
    JSONObject deepTypes(Long accountId, String accessToken, Integer sceneCategory, Integer campaignType, JSONArray sceneIds, Long appId, Integer ocpxActionType);


    /**
     * 创建广告创意
     *
     * @param accessToken
     * @param advertiserId
     * @param requestJson
     */
    Map<String, Object> creativeCreate(String accessToken, Long advertiserId, JSONObject requestJson, Integer count);

    /**
     * 根据创意id 获取创意信息
     *
     * @param accessToken
     * @param advertiserId
     * @param creativeId
     */
    void getCreativeByCreativeId(String accessToken, Long advertiserId, Long creativeId);


    /**
     * 获取视频
     *
     * @param advertiserId
     * @param accessToken
     * @param photoId
     */
    void videoGet(Long advertiserId, String accessToken, String photoId, String signature);

    /**
     * 获取图片信息
     *
     * @param advertiserId
     * @param accessToken
     * @param imageToken
     */
    void imageGet(Long advertiserId, String accessToken, String imageToken);

    /**
     * 获取 地域列表
     *
     * @param accessToken
     */
    void areaList(String accessToken);


    /**
     * 获取应用列表
     *
     * @param advertiserId
     * @param accessToken
     */
    void getAppList(Long advertiserId, String accessToken);


    /**
     * 文件上传 发送请求
     *
     * @param url
     * @param paramMap
     * @param headerMap
     * @param filePath
     */
    String exceptInfoForRestTemplate(String url, Map<String, Object> paramMap, Map<String, String> headerMap, String filePath);


    /**
     * 快手 广告主信息
     *
     * @param accountId
     * @param accessToken
     * @return
     */
    Map<String, Object> advertiserInfo(Long accountId, String accessToken);

    /**
     * 获取视频列表
     *
     * @param token
     * @param
     */
    void getVideoList(CtopOauthToken token, String startDate, String endDate);


    /**
     * 获取广告主分天报表
     *
     * @param token
     * @param startDate
     * @param endDate
     */
    void getAdvertiserReportDaily(CtopOauthToken token, Date startDate, Date endDate, String reportDims);

    /**
     * 获取计划分天报表
     *
     * @param token
     * @param startDate
     * @param endDate
     */
    void getAdvertiserCampaignReportDaily(CtopOauthToken token, Date startDate, Date endDate);


    /**
     * 获取创意分天报表 暂停使用
     *
     * @param token
     * @param startDate
     * @param endDate
     * @param campaignIds
     */
    void getAdvertiserCreativeReportDaily(CtopOauthToken token, Date startDate, Date endDate, JSONArray campaignIds, JSONArray creativeIds);

    /**
     * 获取广告主时报
     *
     * @param token
     * @param startDate
     * @param endDate
     */
    void getAdvertiserReportHourly(CtopOauthToken token, Date startDate, Date endDate);

    /**
     * 获取计划时报
     *
     * @param token
     * @param startDate
     * @param endDate
     */
    void getAdvertiserCampaignReportHourly(CtopOauthToken token, Date startDate, Date endDate);


    /**
     * 获取创意时报 暂停使用
     *
     * @param token
     * @param startDate
     * @param endDate
     */
    void getAdvertiserCreativeReportHourly(CtopOauthToken token, Date startDate, Date endDate);

    /**
     * 获取计划列表
     *
     * @param token
     * @param startDate
     * @param endDate
     */
    void getCampaignList(CtopOauthToken token, Date startDate, Date endDate);


    /**
     * 获取计划列表,新增一个参数 按创建时间，还是更新时间进行筛选
     *
     * @param token
     * @param startDate
     * @param endDate
     * @param timeFilterType
     */
    JSONArray getCampaignList(CtopOauthToken token, Date startDate, Date endDate, int timeFilterType);


    /**
     * 获取组列表
     *
     * @param token
     * @param startDate
     * @param endDate
     */
    void getGroupList(CtopOauthToken token, Date startDate, Date endDate);


    /**
     * 获取指定广告计划下的广告组列表
     *
     * @param token
     * @param campaignId
     * @param startDate
     * @param endDate
     * @param time_filter_type
     */
    JSONArray getGroupList(CtopOauthToken token, Long campaignId, Date startDate, Date endDate, int time_filter_type);


    /**
     * 获取快手图片列表
     *
     * @param token
     */
    void getImageList(CtopOauthToken token, String statDate);


    /**
     * 获取账户余额
     *
     * @param oauthToken
     * @return
     */
    JSONObject fundGet(CtopOauthToken oauthToken);


    /**
     * 获取账户流水数据
     *
     * @param token
     */
    void getDailyFlows(CtopOauthToken token);


    /**
     * 获取人群包接口
     *
     * @param accountId
     * @param accessToken
     * @return
     */
    void getPopulationList(Long accountId, String accessToken, Integer page);

     /**
     * 获取人群包接口
     *
     * @param accountId
     * @param accessToken
     * @return
     */
    void getMediaList(Long accountId, String accessToken, Integer page);


    /**
     * 获取定向标签
     *
     * @param accountId
     * @param accessToken
     */
    void getTargetingTags(Long accountId, String accessToken);


    /**
     * 获取可选的应用定向
     *
     * @param accountId
     * @param accessToken
     * @param appName
     * @return
     */
    JSONArray getAppSearch(Long accountId, String accessToken, String appName);


    // void getSuZaoList(String token, Long accountId, int page, String startDate, String endDate);

    /**
     * 异步获取创意信息
     *
     * @param accountId
     * @param accessToken
     * @param campaignId
     */

    void getAsyncCreativeList(Long accountId, String accessToken, Long campaignId);


    /**
     * 获取转化目标
     *
     * @param accountId
     * @param accessToken
     * @param type
     * @return
     */
    List<ConvertVo> getConvertList(Long accountId, String accessToken, Integer type);

    /**
     * 获取可选的动态词包
     *
     * @param accountId
     * @param accessToken
     * @return
     */
    JSONArray getCreativeWord(Long accountId, String accessToken);


    /**
     * 获取下载页id
     *
     * @param accountId
     * @param appId
     * @param viewComp
     * @return
     */
    JSONArray getPageList(Long accountId, String token, Long appId, String viewComp);


    Map<String, Object> batchCreativeCreate(String accessToken, Long advertiserId, JSONObject requestJson, Integer count, String userId);

    void getCreativeByCreativeIds(String accessToken, Long advertiserId, JSONArray creativeIds);

    JSONArray getAppNames(Long accountId, String accessToken, JSONArray appIds);

    /**
     * mcb 转化方式
     * @param accountId
     * @param accessToken
     * @param sceneCategory
     * @param campaignType
     * @param sceneIds
     * @param appId
     * @return
     */
    JSONObject mcbConversionInfos(Long accountId, String accessToken, Integer sceneCategory, Integer campaignType, JSONArray sceneIds, Long appId);

    List<JSONObject> getMedias(Long accountId);
}



