package com.cool.store.service;

import com.cool.store.request.*;
import com.cool.store.vo.LinePointBaseInfoVO;
import com.cool.store.vo.point.*;
import com.cool.store.vo.shop.RentInfoToDoVO;
import com.github.pagehelper.PageInfo;

import java.util.List;

/**
 * @author zhangchenbiao
 * @FileName: ShopPointService
 * @Description:
 * @date 2024-03-29 15:25
 */
public interface PointService {

    /**
     * 新增铺位
     * @param shopPointDetailRequest
     * @param userId
     * @return
     */
    Long addPointDetailInfo(AddPointDetailRequest shopPointDetailRequest, String userId);


    /**
     * 获取铺位详情
     * @param pointId
     * @return
     */
    PointDetailVO getPointDetailInfo(Long pointId, Boolean isGetNodeNo);

    /**
     * 更新铺位
     * @param shopPointDetailRequest
     * @return
     */
    Long updatePointDetailInfo(UpdatePointDetailRequest shopPointDetailRequest);

    /**
     * 生成铺位评估报告
     * @param pointId
     * @return
     */
    Integer generateEvaluationReport(Long pointId);

    /**
     * 铺位失效
     * @param pointId
     * @return
     */
    Integer pointInvalid(Long pointId);

    /**
     * 解绑铺位
     * @param pointId
     * @return
     */
    Integer pointUnbind(Long pointId);

    /**
     * 配置评估报告
     * @param request
     * @return
     */
    Integer addMapEvaluationReport(AddMapEvaluationReportRequest request);

    /**
     * 提交审批
     * @param pointId
     * @return
     */
    Integer submitAudit(SubmitPointAuditRequest request);

    /**
     * 审批设置
     * @param request
     * @return
     */
    Integer auditSetting(AuditSettingRequest request);

    /**
     * 获取审批设置
     * @return
     */
    AuditSettingVO getAuditSetting();

    /**
     * 获取点位待办用户列表
     * @param pointId
     * @return
     */
    List<String> getTodoUserList(Long pointId);

    /**
     * 营运人员审批
     * @param userId
     * @param request
     * @return
     */
    Integer operationUserAudit(String userId, OperationAuditRequest request);

    /**
     * 审批
     * @param userId
     * @param request
     * @return
     */
    Integer audit(String userId, PointAuditRequest request);

    /**
     * 转让招商经理
     * @param request
     * @return
     */
    Integer turnDevelopmentManager(TurnDevelopmentManagerRequest request);

    /**
     * 获取我负责的线索列表
     * @param request
     * @return
     */
    PageInfo<LinePointBaseInfoVO> getLinePage(PointLinePageRequest request);


    /**
     * 获取单个加盟商信息
     * @param lineId
     * @return
     */
    LinePointBaseInfoVO getLineInfo(Long lineId);

    /**
     * 获取我的数据
     * @param userId
     * @return
     */
    PointHomePageDataVO getMyPointData(String userId);

    /**
     * 获取我的铺位
     * @param request
     * @return
     */
    PageInfo<PointPageVO> getMyPointPage(PointPageRequest request);

    /**
     * 获取团队铺位
     * @param request
     * @return
     */
    PageInfo<PointPageVO> getTeamPointPage(AllPointPageRequest request);

    /**
     * 获取审批记录
     * @param pointId
     * @return
     */
    List<PointAuditRecordVO> getPointAllAuditRecord(Long pointId);

    /**
     * 获取推荐铺位列表
     * @param lineId
     * @return
     */
    List<PointRecommendPageVO> getLineRecommendPointList(Long lineId);

    /**
     * 获取我的可推荐铺位列表
     * @param request
     * @return
     */
    PageInfo<PointPageVO> getRecommendPointList(RecommendPointPageRequest request);

    /**
     * 加盟商推荐铺位
     * @param request
     * @return
     */
    Integer lineRecommendPoint(LineRecommendPointRequest request);

    /**
     * 铺位推荐加盟商
     * @param request
     * @return
     */
    Integer pointRecommendLine(PointRecommendLineRequest request);

    /**
     * 选址人员转让加盟商
     * @param request
     * @return
     */
    Integer turnLine(TurnLineRequest request);

    /**
     * 修改意向开店数量
     * @param request
     * @return
     */
    Integer updateWantShopNum(UpdateWantShopNumRequest request);

    /**
     * 获取待办列表
     * @param request
     * @return
     */
    PageInfo<PointPageVO> getTodoList(PointTodoPageRequest request);

    /**
     * 获取线索推荐店铺列表
     * @param request
     * @return
     */
    PageInfo<MiniPointPageVO> getLineRecommendPointPage(MiniPointPageRequest request);

    /**
     * 线索选址铺位
     * @param request
     * @return
     */
    Integer lineSelectPoint(SelectPointRequest request);

    /**
     * 拒绝铺位
     * @param request
     * @return
     */
    Integer lineRejectPoint(RejectPointRequest request);

    /**
     * 加盟商提交新铺位
     * @param request
     * @return
     */
    Long miniAddPointDetailInfo(MiniAddPointRequest request);


    /**
     * 上传租赁合同
     * @param request
     * @return
     */
    Integer uploadRentContract(AddRentContractRequest request);

    /**
     * 获取租赁合同详情
     * @param shopId
     * @return
     */
    ShopRentInfoVO getRentContractDetail(Long shopId);

    /**
     * 租赁合同审核
     * @param request
     * @return
     */
    Integer auditRentContract(AuditRentContractRequest request);

    /**
     * 更新租赁合同
     * @param request
     * @return
     */
    Integer updateRentContract(UpdateRentContractRequest request);

    /**
     * 获取选址审批待办
     * @param userId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    PageInfo<PointToDoVO> getSelectPointToDoPage(String userId, Integer pageNumber, Integer pageSize);


    /**
     * 获取租赁合同审批
     * @param userId
     * @param pageNumber
     * @param pageSize
     * @return
     */
    PageInfo<RentInfoToDoVO> getRentContractToDoPage(String userId, Integer pageNumber, Integer pageSize);
}
