package com.ycwl.basic.mapper;

import com.ycwl.basic.model.pc.printer.entity.MemberPrintEntity;
import com.ycwl.basic.model.pc.printer.entity.PrintTaskEntity;
import com.ycwl.basic.model.pc.printer.entity.PrinterEntity;
import com.ycwl.basic.model.pc.printer.resp.MemberPrintResp;
import com.ycwl.basic.model.pc.printer.resp.PrinterResp;
import com.ycwl.basic.model.printer.resp.PrintTaskResp;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
public interface PrinterMapper {
    List<PrinterEntity> list(@Param("condition") PrinterEntity condition);
    
    PrinterEntity getById(@Param("id") Integer id);

    int add(PrinterEntity entity);

    int update(PrinterEntity entity);

    int deleteById(@Param("id") Integer id);

    PrinterEntity findByAccessKey(String accessKey);

    PrintTaskResp findTaskByPrinterId(Integer printerId);

    List<PrintTaskResp> listPendingTasksByPrinterId(Integer printerId);

    int updateTaskStatus(@Param("id") Integer id, @Param("status") Integer status);

    int compareAndSetTaskStatus(@Param("id") Integer id,
                                @Param("expectStatus") Integer expectStatus,
                                @Param("newStatus") Integer newStatus);

    PrintTaskEntity getTaskById(Integer id);

    List<PrinterResp> listByScenicId(@Param("scenicId") Long scenicId);
    int countFacePhoto(Long scenicId, Long faceId, Long sourceId);
    List<MemberPrintResp> listRelation(@Param("memberId") Long memberId, @Param("scenicId") Long scenicId);
    List<MemberPrintResp> listRelationByFaceId(Long memberId, Long scenicId, Long faceId);

    int deleteUserPhoto(Long memberId, Long scenicId, Long relationId);

    int addUserPhoto(MemberPrintEntity entity);

    MemberPrintResp getUserPhoto(Long memberId, Long scenicId, Long id);

    int setPhotoCropped(Long memberId, Long scenicId, Long id, String url, String crop);

    int setPhotoQuantity(Long memberId, Long scenicId, Long id, Integer quantity);

    List<MemberPrintResp> getUserPhotoByIds(List<Long> ids);

    int setUserIsBuyItem(Long memberId, Long id, Long orderId);

    void updateUserPhotoListToPrinter(Long memberId, Long scenicId, Integer printerId);

    List<MemberPrintResp> listRelationByOrderId(Long orderId);

    PrintTaskResp queryTaskByMpId(Integer id);
}
