package com.gxwebsoft.shop.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gxwebsoft.common.core.web.PageResult;
import com.gxwebsoft.shop.entity.ShopStoreFence;
import com.gxwebsoft.shop.param.ShopStoreFenceParam;

import java.util.List;

/**
 * 黄家明_电子围栏Service
 *
 * @author 科技小王子
 * @since 2026-02-07 18:10:25
 */
public interface ShopStoreFenceService extends IService<ShopStoreFence> {

    /**
     * 分页关联查询
     *
     * @param param 查询参数
     * @return PageResult<ShopStoreFence>
     */
    PageResult<ShopStoreFence> pageRel(ShopStoreFenceParam param);

    /**
     * 关联查询全部
     *
     * @param param 查询参数
     * @return List<ShopStoreFence>
     */
    List<ShopStoreFence> listRel(ShopStoreFenceParam param);

    /**
     * 根据id查询
     *
     * @param id 自增ID
     * @return ShopStoreFence
     */
    ShopStoreFence getByIdRel(Integer id);

    /**
     * 当前租户是否配置了任一启用围栏（status=0）。
     */
    boolean hasEnabledFences(Integer tenantId);

    /**
     * 校验坐标是否落在任一启用围栏内。
     * <p>
     * 约定：
     * - 围栏按 tenantId + status=0 过滤；
     * - 支持多个围栏：命中任意一个即通过；
     * - 无围栏配置：直接放行；
     * - 围栏 points 异常：抛出异常（避免误送）。
     *
     * @param tenantId 租户ID
     * @param lng      经度
     * @param lat      纬度
     */
    void validatePointInEnabledFences(Integer tenantId, double lng, double lat);

    /**
     * 校验坐标是否落在任一启用围栏内。
     * <p>
     * 约定：
     * - 围栏按 tenantId + status=0 过滤；
     * - 支持多个围栏：命中任意一个即通过；
     * - 无围栏配置：直接放行；
     * - 围栏 points 异常：抛出异常（避免误送）。
     *
     * @param tenantId 租户ID
     * @param lng      经度
     * @param lat      纬度
     */
    Boolean validatePointInEnabled(Integer tenantId, double lng, double lat);

}
