package com.cyksj.service.relation;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cyksj.model.entity.GoodsDonSku;
import com.cyksj.model.entity.GroupsRelation;
import com.cyksj.model.entity.NetflixUserAccountStatusRecord;
import com.cyksj.model.manage.views.AccountView;
import com.cyksj.model.request.ErrorNetflixChangeReq;
import com.cyksj.model.request.SpecialGoodsTicketReq;
import com.cyksj.model.request.TicketLoginReq;
import com.cyksj.model.response.NetflixErrorAccountStatus;
import com.cyksj.model.response.NetflixRecoverResp;
import com.cyksj.model.response.NetflixRefundInfoResp;
import com.cyksj.model.views.*;
import com.ejlchina.searcher.SearchResult;

import java.util.List;

/*
 *项目名: netflix
 *文件名: GroupRelationFrontService
 *创建者: JavaZou
 *创建时间:2022/12/29 15:42
 */
public interface GroupRelationFrontService {
	SearchResult<RenewalView> getMyTicket(long userId, Boolean isLoginPopularize, String customId, String account, String orderNo, Integer cmt);

	Boolean isJoinCorpWx(Long userId, Boolean isJoin, Boolean noCoupon);

	GroupsRelation getSimilarExpiredGroupRelation(GoodsDonSku sku, List<Long> errorsRelationIds, String ip);

	Page<UserRecommendGoodsFrontView> getRecommendGoodsViews(List<Long> yhShopGoodsIds, Boolean isPayNf, List<Long> filter_goods_id, Boolean filterCourseGoods, Integer start, Integer limit);

	/**
	 * 通过邮件发送课程
	 */
	void sendCourseWare(SpecialGoodsTicketReq request) throws Exception;

	/**
	 * 获取车票座位
	 */
	GroupsRelation getRelation(Long payRelationId, Long userId, GoodsDonSku sku, String ip);

	/**
	 * 获取车票账号登录 验证码
	 */
	String getAiVerifyCode(TicketLoginReq loginReq) throws Exception;


	void checkGroupsAvailParkingNum(Long skuId, Long groupsId, Integer availableParkingNum, Integer maxNum);

	/**
	 * 调整指定规格车队下次可 停用车位数的时间
	 */
	void adjustGroupsParkingTime(Long relationId, GoodsDonSku sku);

	void setGroupsTripsParkingTimeEmpty(GoodsDonSku sku, Long relationId);

	Integer getUserCodeNumBySkuId(Long userId, Long skuId, Boolean isHasVerifyCode);

	List<RenewalView>  getHasPayGoods(long userId);

	List<RenewalView> getExpiryRenewalNotify(Long userId);

	void getCollegeStudentUserGptTicket(Long userId);

	RenewalView getTicketDetail(long userId, Long relationId);

	GroupsRelation ticketLogin(TicketLoginReq loginReq);

	String outsideTicketVerify(TicketLoginReq loginReq);

	String getNfHouseholdDevice(long userId, Long relationId) throws Exception;

	String getVerifyCode(String account) throws Exception;

	void changeTicket(long userId, Long relationId);

	AccountView getTempAccount(long userId, Long relationId);

	void nfErrorAccountSubmit(long userId, Long relationId);

	NetflixErrorAccountStatus getNetflixErrorAccountStatus(long userId, Long relationId);

	List<NetflixUserAccountStatusRecord> getUserNetflixSubmitRecord(long userId);

	/**
	 * 获取试用车票
	 *
	 * @param userId
	 * @param trialSkuId
	 * @param ticketType 默认1购买,2.体验,3.镜像裂变
	 */
	Long getTrialTicketByUserIdAndGoodsId(Long userId, Long trialSkuId, Integer ticketType);

	Boolean getMirrorPopups(long userId);

	/**
	 * 用户获取车票
	 */
	Long getTicket(Long userId, Long skuId, Boolean isVip);

	Boolean getVipMirrorTicketIfEmpty(long userId, Long skuId);

	NetflixRecoverResp netflixSubmitRecover(ErrorNetflixChangeReq req);

	void errorNetflixSubmitChangeOtherTicket(ErrorNetflixChangeReq req) throws Exception;

	List<GoodsCategorySkuView> getNetflixReplaceOtherSkus(long userId, Long relationId) throws Exception;

	Boolean refundNetflix(ErrorNetflixChangeReq req) throws Exception;

	NetflixRefundInfoResp refundNetflixInfo(Long userId, Long relationId);

	List<UserMirrorTicketView> getMirrorTicket(long userId);

	TicketRenewUpgradeView getRenewUpgradeInfo(long userId, Long relationId);

	void netflixSubmitFrozen(ErrorNetflixChangeReq req);
}
