package com.ruoyi.web.modules.screen.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.web.modules.screen.domain.dto.ScreenLoginBody;
import com.ruoyi.web.modules.screen.support.ScreenLoginService;

/**
 * 大屏免密登录（RSA 加密 UUID 换若依 Token，供 ruoyi-screen 自动登录）
 */
@Anonymous
@RestController
@RequestMapping("/bigScreen")
public class ScreenLoginController
{
    public static final String HEADER_SCREEN_TOKEN = "X-Screen-Token";

    @Autowired
    private ScreenLoginService screenLoginService;

    /**
     * 获取 RSA 公钥，前端生成 UUID 后使用 JSEncrypt 加密再调用 {@link #login}。
     */
    @GetMapping("/publicKey")
    public AjaxResult rsaPublicKey()
    {
        return AjaxResult.success(screenLoginService.getRsaPublicKey());
    }

    /**
     * 免密登录：优先读取请求头 {@value #HEADER_SCREEN_TOKEN}，其次 Body.token。
     * 成功响应与 {@code POST /login} 一致，含 {@code token} 字段。
     */
    @PostMapping("/login")
    public AjaxResult login(
            @RequestHeader(value = HEADER_SCREEN_TOKEN, required = false) String headerToken,
            @RequestBody(required = false) ScreenLoginBody body)
    {
        String encryptedToken = headerToken;
        if (StringUtils.isEmpty(encryptedToken) && body != null)
        {
            encryptedToken = body.getToken();
        }
        String token = screenLoginService.login(encryptedToken);
        AjaxResult ajax = AjaxResult.success();
        ajax.put(Constants.TOKEN, token);
        return ajax;
    }
}
