package cn.iocoder.yudao.module.app.company.controller;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import cn.iocoder.yudao.module.company.entity.Company;
import cn.iocoder.yudao.module.company.service.CompanyService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.annotation.security.PermitAll;

import java.util.List;

import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;

/**
 * 用于需要获取企业信息的地方
 * 如维修的附近修理厂
 *
 * @author 小李
 * @date 14:04 2024/9/23
 **/

@RestController
@RequestMapping("/userClient/base/companySmallProgram")
@Tag(name = "API - BASE 小程序驾校查询")
@Validated
@PermitAll
public class CompanySmallProgramAPI {

    @Resource
    private CompanyService companyService;

    /**
     * 通过服务名称查能提供服务的企业 分页(不拼接租户ID)
     *
     * @author 小李
     * @date 14:09 2024/9/23
     * @param company 企业对象，主要是serverCodes
     * @param pageNO 页码
     * @param pageSize 条数
     **/
    @GetMapping("/pageNoTenantId")
    @Operation(summary = "通过服务名称查能提供服务的企业 分页-小程序")
    @TenantIgnore
    @PermitAll
    public CommonResult<?> getCompanyPageNoTenantIdByServer(Company company,
                                                            @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNO,
                                                            @RequestParam(value = "pageSize", defaultValue = "10")Integer pageSize){
        Page<Company> page = new Page<>(pageNO, pageSize);
        return success(companyService.getCompanyPageByServer(company, page));
    }

    /**
     * 查企业能提供的业务
     *
     * @author 小李
     * @date 10:21 2024/9/24
     * @param id 企业ID
     **/
    @GetMapping("/noTenantIdGet")
    @Operation(summary = "查企业能提供的业务-小程序")
    @TenantIgnore
    @PermitAll
    public CommonResult<?> getCompanyServerNoTenantIdById(@RequestParam("id") String id){
        return success(companyService.getCompanyServerById(id));
    }

    /**
     * 查某租户下某个业务系统的企业信息
     * @author vinjor-M
     * @date 15:08 2024/11/15
     * @param tenantId 租户ID
     * @param systemCode 系统标识
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<?>
     **/
    @GetMapping("/getCompanyByTenantId")
    @Operation(summary = "查某租户下某个业务系统的企业信息")
    @TenantIgnore
    @PermitAll
    public CommonResult<?> getCompanyByTenantId(String tenantId,String systemCode){
        LambdaQueryWrapper<Company> queryWrapper = new LambdaQueryWrapper<Company>()
                .eq(TenantBaseDO::getTenantId,tenantId)
                .like(Company::getServiceCodes,systemCode)
                .orderByDesc(BaseDO::getCreateTime);
        List<Company> list = this.companyService.list(queryWrapper);
        return success(list.isEmpty()?null:list.get(0));
    }
}
