package com.zhongshu.card.client.service.school;

import com.zhongshu.card.client.model.base.OidModel;
import com.zhongshu.card.client.model.school.*;
import com.github.microservice.net.ResultContent;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author TRX
 * @date 2024/6/13
 */
public interface CardInfoService {

    // 添加编辑卡片
    ResultContent addCardInfo(CardInfoParam param);

    // 从卡池选择卡片绑定到个人
    ResultContent bindCardFromPool(String poolId, String userId);

    // 绑定
    ResultContent bindCardFromPoolByOrgId(String poolId, String id, String remark);

    ResultContent bindByCode(String code);

    // 解绑用户卡片
    ResultContent unBindCard(String id);

    ResultContent<List<CardInfoModel>> getCurrentUserOrgAll(String oid);

    ResultContent<List<CardInfoModel>> getOrgCardList(String id);

    List<CardInfoModel> getUserOrgAllCard(String userId, String oid);

    // 删除卡片
    ResultContent deleteCardInfo(String id);

    // 卡片挂失（挂失自己的）
    ResultContent cardLossById(CardLossParam param);

    // 通过iccid挂失被人的
    ResultContent cardLossByIccId(CardLossParam param);

    // 卡片启用
    ResultContent cardEnableById(CardLossParam param);

    // 启用别人的卡片
    ResultContent cardEnableByIccId(CardLossParam param);

    // 查询卡片详情
    ResultContent<CardInfoModel> getCardDetail(String id);

    // 卡号查询卡片
    ResultContent<CardInfoSimpleModel> getCardDetailByCode(String code);

    //----------------------------园区卡片操作 start ------------------------

    ResultContent<Page<CardInfoModel>> page(CardInfoSearch param, Pageable pageable);

    // 通过数据ID挂失（园区操作）
    ResultContent lossById(String id);

    // 通过数据ID启用（园区操作）
    ResultContent enableById(String id);

    // 卡片作废
    ResultContent cardCancel(String id);

    // 恢复作废
    ResultContent restoreCardCancel(String id);

    ResultContent<ImportResultModel> importCard(
            HttpServletRequest request, HttpServletResponse response,
            MultipartFile file, OidModel param);

    void exportProjectCard(HttpServletRequest request, HttpServletResponse response,
            CardInfoSearch param);

}
