package cn.iocoder.yudao.module.system.controller.app.user;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
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.*;

import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

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

@Tag(name = "管理后台 - 用户")
@RestController
@RequestMapping("/system/user")
@Validated
public class AppUserController {

    @Resource
    private AdminUserService userService;
    @Resource
    private TenantService tenantService;

    /**
     * 微信小程序端修改个人信息
     * @author vinjor-M
     * @date 20:14 2024/10/11
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<java.lang.Boolean>
    **/
    @PutMapping("update")
    @Operation(summary = "修改用户")
    public CommonResult<Boolean> updateUser(@RequestBody UserInfoVO reqVO) {
        userService.updateCusInfo(reqVO);
        return success(true);
    }

    /**
     * 根据用户手机号查询所在的所有租户--员工登录
     * @author vinjor-M
     * @date 14:51 2024/10/16
     * @param phone 手机号
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<?>
    **/
    @GetMapping("/getListByPhone")
    @PermitAll
    @Operation(summary = "根据用户手机号查询所在的所有租户--员工登录", description = "根据用户手机号查询所在的所有租户--员工登录")
    public CommonResult<?> getListByPhone(@RequestParam("phone") String phone) {
        List<AdminUserDO> list = userService.selectListByPhoneStaff(phone);
        List<TenantDO> tenants = new ArrayList<>();
        if(!list.isEmpty()){
            tenants = tenantService.listByIds(list.stream().map(AdminUserDO::getTenantId).collect(Collectors.toList()));
        }
        return success(tenants);
    }

}
