package com.ttiglobal.inttilectgpchat.util;


import com.ttiglobal.inttilectgpchat.wrappers.AMLeaderBoardResponse;
import com.ttiglobal.inttilectgpchat.wrappers.AMResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ActiveResponse;
import com.ttiglobal.inttilectgpchat.wrappers.AnswerResponse;
import com.ttiglobal.inttilectgpchat.wrappers.AppVersion;
import com.ttiglobal.inttilectgpchat.wrappers.AssessmentListResponse;
import com.ttiglobal.inttilectgpchat.wrappers.AssessmentQuestionResponse;
import com.ttiglobal.inttilectgpchat.wrappers.AssessmentStatusResponse;
import com.ttiglobal.inttilectgpchat.wrappers.BannerResponse;
import com.ttiglobal.inttilectgpchat.wrappers.BulletinResponse;
import com.ttiglobal.inttilectgpchat.wrappers.BulletinStatusResponse;
import com.ttiglobal.inttilectgpchat.wrappers.CommonResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ContentDetailResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ContentResponse;
import com.ttiglobal.inttilectgpchat.wrappers.CustomerEnquiryModel;
import com.ttiglobal.inttilectgpchat.wrappers.CustomerFeedbackModel;
import com.ttiglobal.inttilectgpchat.wrappers.DSEResponse;
import com.ttiglobal.inttilectgpchat.wrappers.DashboardResponse;
import com.ttiglobal.inttilectgpchat.wrappers.DealerResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ErrorResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ForgotPasswordResponse;
import com.ttiglobal.inttilectgpchat.wrappers.GetAllCustomerDetailsResponse;
import com.ttiglobal.inttilectgpchat.wrappers.GetAllExploreModel;
import com.ttiglobal.inttilectgpchat.wrappers.GetAllPersonalizationModel;
import com.ttiglobal.inttilectgpchat.wrappers.GetAllSalesProcessModel;
import com.ttiglobal.inttilectgpchat.wrappers.GetAllSalutationModel;
import com.ttiglobal.inttilectgpchat.wrappers.GetAllThreeSixtyResponseModel;
import com.ttiglobal.inttilectgpchat.wrappers.HitCountModel;
import com.ttiglobal.inttilectgpchat.wrappers.LanguageResponse;
import com.ttiglobal.inttilectgpchat.wrappers.LeaderBoardResponse;
import com.ttiglobal.inttilectgpchat.wrappers.LearningLevel;
import com.ttiglobal.inttilectgpchat.wrappers.LearningPathResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ManagerDashBoardResponse;
import com.ttiglobal.inttilectgpchat.wrappers.MyTrainingResponse;
import com.ttiglobal.inttilectgpchat.wrappers.NotificationResponse;
import com.ttiglobal.inttilectgpchat.wrappers.OrderHistoryResponse;
import com.ttiglobal.inttilectgpchat.wrappers.OrderStatus;
import com.ttiglobal.inttilectgpchat.wrappers.OtpResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ProductFeedbackResponse;
import com.ttiglobal.inttilectgpchat.wrappers.RMResponse;
import com.ttiglobal.inttilectgpchat.wrappers.RedeemCategoryListResponse;
import com.ttiglobal.inttilectgpchat.wrappers.RedeemProductDetailsResponse;
import com.ttiglobal.inttilectgpchat.wrappers.RedeemProductResponse;
import com.ttiglobal.inttilectgpchat.wrappers.RedeemToWalletResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ReviewResponse;
import com.ttiglobal.inttilectgpchat.wrappers.RewardPointsResponse;
import com.ttiglobal.inttilectgpchat.wrappers.RootGetAllComparisonModel;
import com.ttiglobal.inttilectgpchat.wrappers.ScheduleResponse;
import com.ttiglobal.inttilectgpchat.wrappers.SendAllExploreDetailsModel;
import com.ttiglobal.inttilectgpchat.wrappers.SendEnquiryDataModel;
import com.ttiglobal.inttilectgpchat.wrappers.SignupResponse;
import com.ttiglobal.inttilectgpchat.wrappers.SupplierDetailResponse;
import com.ttiglobal.inttilectgpchat.wrappers.SurveyResponse;
import com.ttiglobal.inttilectgpchat.wrappers.SurveyStatusResponse;
import com.ttiglobal.inttilectgpchat.wrappers.TargetSalesResponse;
import com.ttiglobal.inttilectgpchat.wrappers.TitleResponse;
import com.ttiglobal.inttilectgpchat.wrappers.TopicDetailResponse;
import com.ttiglobal.inttilectgpchat.wrappers.TopicResponse;
import com.ttiglobal.inttilectgpchat.wrappers.UserResponse;
import com.ttiglobal.inttilectgpchat.wrappers.ZoneResponse;

import org.json.JSONObject;

import java.util.HashMap;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Url;

public interface ApiService {

    @POST("app/en_us/user/signin")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<UserResponse> login(@FieldMap HashMap<String, String> object);

    @GET("app/en_us/user/profile")
    Call<UserResponse> getProfile();


    @GET("app/en_us/bulletin?")
    Call<BulletinResponse> getBulletinContents(@Query("page") int page, @Query("limit") int limit);

    @POST("app/en_us/user/otp_validation")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<UserResponse> OtpValidation(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/user/signup")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<SignupResponse> SignUp(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/user/signup_otp")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<OtpResponse> sentOtp(@FieldMap HashMap<String, String> object);


    @POST("app/en_us/user/change_password")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ErrorResponse> changePassword(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/dashboard/changempin")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ErrorResponse> changeMPIN(@FieldMap HashMap<String, String> object);



    @POST("app/en_us/user/forgot_password")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ForgotPasswordResponse> forgotPassword(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/dashboard/dashboardleaderboard")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<AMLeaderBoardResponse> amLeaderBoard(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/manager/region")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ZoneResponse> getRegion(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/manager/zone")
    @Headers("Accept: application/json")
    Call<ZoneResponse> getZone();


    @POST("app/en_us/manager/area")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ZoneResponse> getArea(@FieldMap HashMap<String, String> object);

    @GET("app/en_us/banner")
    Call<BannerResponse> getBanner();

    @GET("app/en_us/dashboard/{year}/{month}")
    Call<DashboardResponse> getDashboard(@Path("year") int year, @Path("month") int month);

    @GET("app/en_us/dashboard/managerdashboard/{year}/{month}")
    Call<ManagerDashBoardResponse> getAMDashboard(@Path("year") int year, @Path("month") int month);

    @POST("app/en_us/dashboard/areamanagerdashboardapp/{year}/{month}")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ManagerDashBoardResponse> getAreaManagerDashboard(@Path("year") int year, @Path("month") int month, @FieldMap HashMap<String, String> object);

    @GET("app/en_us/category")
    Call<MyTrainingResponse> getMyTraining();

    @GET("app/en_us/assessment")
    Call<AssessmentListResponse> getAssement();

    @GET("app/en_us/training?filter=status:completed")
    Call<MyTrainingResponse> getCompletedTraining();

    @GET("app/en_us/topics/{id}")
    Call<TopicResponse> getTrainingTopics(@Path("id") String id, @Query("page") int page, @Query("limit") int limit);

    @GET("app/en_us/topics/content/{assettopicid}")
    Call<ContentResponse> getTopicContents(@Path("assettopicid") String assettopicid,
                                           @Query("page") int page, @Query("limit") int limit);

    @GET("app/en_us/topics/get_content_details/{assettopicid}")
    Call<ContentDetailResponse> getTopicContentsDetails(@Path("assettopicid") String assettopicid);

    @POST("app/en_us/topics/content_status")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ErrorResponse> updateContentStaus(@FieldMap HashMap<String, String> object);

    @GET("app/en_us/training/get_topic_details/{id}")
    Call<TopicDetailResponse> getTopicDetail(@Path("id") String id);

    @GET("app/en_us/training/get_supplier_details/{id}")
    Call<SupplierDetailResponse> getSupplierDetail(@Path("id") String id);

    @GET("app/en_us/assessment/assessment_status/{id}")
    Call<AssessmentStatusResponse> getAssessmentByPosition(@Path("id") String id);

    @GET("app/en_us/bulletin/bulletin_status/{id}")
    Call<BulletinStatusResponse> getBulletinByPosition(@Path("id") String id);

    @GET("app/en_us/assessment/question/{id}")
    Call<AssessmentQuestionResponse> getAssesmentQuistion(@Path("id") String id);

    @GET("app/en_us/assessment")
    Call<AssessmentListResponse> getAssessmentList();

    @POST("app/en_us/assessment/{id}")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<AnswerResponse> postAssessment(@Path("id") String id, @FieldMap HashMap<String, String> object);

    @GET("app/en_us/assessment/review/{id}")
    Call<ReviewResponse> getReviewQuistion(@Path("id") String id);

    @GET("app/en_us/survey/training")
    Call<MyTrainingResponse> getSurvey();

    @GET("app/en_us/survey")
    Call<SurveyResponse> getSurveyList();

    @GET("app/en_us/survey/survey_status/{id}")
    Call<SurveyStatusResponse> getSurveyByPosition(@Path("id") String id);

    @GET("app/en_us/survey/question/{id}")
    Call<AssessmentQuestionResponse> getSurveyQuistion(@Path("id") String id);

    @POST("app/en_us/survey/{id}")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<AnswerResponse> postSurvey(@Path("id") String id, @FieldMap HashMap<String, String> object);

    @GET("app/en_us/survey/review/{id}")
    Call<AssessmentQuestionResponse> getSurveyReviewQuistion(@Path("id") String id);

    @GET("app/en_us/assessment/training")
    Call<MyTrainingResponse> getLeaderBoard();

    @GET("app/en_us/dashboard/language")
    Call<LanguageResponse> getLanguage();

    @GET("app/en_us/leaderboard/sales/{year}/{month}")
    Call<LeaderBoardResponse> getLeaderBoardList(@Path("year") String year,
                                                 @Path("month") String month);

    @GET("app/en_us/leaderboard/assessment/{type}")
    Call<LeaderBoardResponse> getLeaderBoardAssessmentTypeList(@Path("type") String type);
    @GET("app/en_us/leaderboard/assessment")
    Call<LeaderBoardResponse> getLeaderBoardAssessmentList();



    @GET("app/en_us/leaderboard/sales/{type}/{year}/{month}")
    Call<LeaderBoardResponse> getLeaderBoardSalesTypeList(@Path("type") String type,@Path("year") String year,
                                                          @Path("month") String month);


    @GET("app/en_us/dashboard/sales/{year}/{month}")
    Call<TargetSalesResponse> getTargetedSales(@Path("year") String year,
                                               @Path("month") String month);



    @GET("app/en_us/redeem/wallet")
    Call<RedeemToWalletResponse> getRedeemToWallet();

    @GET("app/en_us/dashboard/orderhistory?")
    Call<OrderHistoryResponse> getOrderHistory(@Query("page") int page, @Query("limit") int limit);

    @GET("app/en_us/dashboard/learnpath")
    Call<LearningPathResponse> getLearningPath();

    @GET("app/en_us/common/learning")
    Call<LearningLevel> getLearninglevel();

    @GET("app/en_us/dashboard/{key}")
    Call<RewardPointsResponse> getRewardPointHistory(@Path("key") String key, @Query("page") int page, @Query("limit") int limit);


    @Multipart
    @POST("app/en_us/user/profile")
    Call<UserResponse> postProfileWithImage(@Part MultipartBody.Part image, @Part("email") RequestBody fname,
                                            @Part("dob") RequestBody lname, @Part("is_married") RequestBody email,
                                            @Part("marriage_date") RequestBody marriage_date);

    @POST("app/en_us/user/profile")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<UserResponse> postProfile(@FieldMap HashMap<String, String> object);

    @GET("app/en_us/notification?")
    Call<NotificationResponse> getNotifications(@Query("page") int page, @Query("limit") int limit);

    @GET("app/en_us/redeem/category")
    Call<RedeemCategoryListResponse> getRedeemCategoryList();

    @GET("app/en_us/redeem/category/{catid}")
    Call<RedeemProductResponse> getRedeemCategoryProductList(@Path("catid") String catid);


    @GET("app/en_us/redeem/product/{productid}")
    Call<RedeemProductDetailsResponse> getProductDetails(@Path("productid") String productId);


    @POST("app/en_us/redeem/order")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<OrderStatus> postProductOrder(@FieldMap HashMap<String, String> object);




    @GET("app/en_us/notification?")
    Call<NotificationResponse> getNotificationsDB();

    @POST("app/en_us/notification/read_notification")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ErrorResponse> updateReadNotifications(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/notification/remove_notification")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ErrorResponse> updateDeleteNotifications(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/user/devicetoken")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<ErrorResponse> updateFcmToken(@FieldMap HashMap<String, String> object);

    @GET
    Call<AppVersion> getAppVersion(@Url String fileUrl);

    @GET("app/en_us/user/mpin_otp")
    Call<OtpResponse> sentMPINOtp(@FieldMap HashMap<String, String> object);


    @POST("_api/user/login")
    @Headers("Accept: application/json")
    Call<ResponseBody> login(@Body JSONObject object);

    @POST("appstore.php?funname=getAppVersions")
    @Headers("Accept: application/json")
    Call<ResponseBody> getAppVersion(@Body JSONObject object);

    @GET("app/en_us/explore/model")
    Call<GetAllExploreModel> getAllExploreImage();

    @GET("app/en_us/explore/comparison/{id}")
    Call<RootGetAllComparisonModel> getAllComparisonDetails(@Path("id") String stringValue);

    @GET("app/en_us/explore/newimages360/{id}")
    Call<GetAllThreeSixtyResponseModel> getAllThreeSixtyImage(@Path("id") String stringValue);

    @GET("app/en_us/explore/salesprocess/{id}")
    Call<GetAllSalesProcessModel> getAllSalesProcessModel(@Path("id") String stringValue);

    @GET("app/en_us/explore/variant/{id}")
    Call<GetAllPersonalizationModel> getAllPersonalizationModel(@Path("id") String stringValue);

    @GET
    Call<ResponseBody> downloadFileWithDynamicUrlSync(@Url String fileUrl);

    @POST("app/en_us/explore/enquiry/{id}")
    Call<CommonResponse> sendAllDatasToServer(@Path("id") String stringValue, @Body SendEnquiryDataModel sendEnquiryDataModel);

    @POST("app/en_us/hitcount")
    Call<CommonResponse> sendAllHitCount(@Body HitCountModel sendEnquiryDataModel);

    @POST("app/en_us/explore/customer")
    Call<GetAllCustomerDetailsResponse> sendAllExploreDetails(@Body SendAllExploreDetailsModel sendAllExploreModel);

    @GET("app/en_us/common/salutation")
    Call<GetAllSalutationModel> getAllSaltuation();

    @GET("app/en_us/explore/customerfeedback")
    Call<ProductFeedbackResponse> getAllFeedbackData();

    @POST("app/en_us/explore/customerfeedback")
    Call<AnswerResponse> sendFeedBack(@Body CustomerFeedbackModel customerFeedbackModel);

    @POST("app/en_us/explore/customerenquiry")
    Call<CommonResponse> sendAllCustomerEnquiry(@Body CustomerEnquiryModel sendEnquiryDataModel);


    @GET("app/en_us/videotraining?")
    Call<ScheduleResponse> getSchedule(@Query("page") int page, @Query("limit") int limit);

    @POST("app/en_us/videotraining")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<CommonResponse> postSchedule(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/videotraining/updatetime")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<CommonResponse> updateTime(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/videotraining/message")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<CommonResponse> postMessage(@FieldMap HashMap<String, String> object);

    @GET("app/en_us/videotraining/traininglist")
    Call<TitleResponse> getTrainingTitle();

    @POST("app/en_us/common/trainerrm")
    @Headers("Accept: application/json")
    Call<RMResponse> getRMList();

    @POST("app/en_us/common/traineram")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<AMResponse> getAMList(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/common/trainerdealer")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<DealerResponse> getDealerList(@FieldMap HashMap<String, String> object);

    @POST("app/en_us/common/dselist")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<DSEResponse> getDseList(@FieldMap HashMap<String, String> object);

    @DELETE("app/en_us/videotraining/scheduleusers/{trainingid}/{userid}")
    @Headers("Accept: application/json")
    Call<CommonResponse> removeDSEFromTraining(@Path("trainingid") String trainingid, @Path("userid") String userid);

    @DELETE("app/en_us/videotraining/{trainingid}")
    @Headers("Accept: application/json")
    Call<CommonResponse> removeTraining(@Path("trainingid") String trainingid);

    @POST("app/en_us/videotraining/scheduleusers")
    @Headers("Accept: application/json")
    @FormUrlEncoded
    Call<CommonResponse> updateParticipant(@FieldMap HashMap<String, String> object);

    @GET("app/en_us/videotraining/trainingdse/{id}")
    Call<ActiveResponse> getActiveList(@Path("id") String tID);

}
