package com.example.catchTheLetters.controller;

import com.example.catchTheLetters.entity.LoginDto;
import com.example.catchTheLetters.entity.RegisterDto;
import com.example.catchTheLetters.entity.User;
import com.example.catchTheLetters.service.AuthService;
import com.example.catchTheLetters.utils.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

/**
 * 认证控制器
 * @author spyn
 */
@RestController
@Slf4j
@Api(tags = "认证API")
@RequestMapping("/auth")
public class AuthController {

    @Resource
    private AuthService authService;

    @ApiOperation(value = "用户登录")
    @PostMapping("/login")
    public R<String> login(@RequestBody LoginDto loginDto) {
        return R.ok(authService.login(loginDto));
    }

    @ApiOperation(value = "用户注销")
    @PostMapping("/logout")
    public R logout(String token) {
        return authService.logout(token) ? R.ok() : R.fail();
    }

    @ApiOperation(value = "验证token(不会返回密码)")
    @PostMapping("/verify")
    public R<User> verify(String token) {
        return R.ok(authService.verify(token));
    }

    @ApiOperation(value = "用户注册")
    @PostMapping("/register")
    public R<String> register(@RequestBody RegisterDto registerDto) {
        return R.ok(authService.register(registerDto));
    }

    @ApiOperation(value = "用户信息查询(不会返回密码,查不出status为0的用户)")
    @GetMapping("/info")
    @ApiParam(name = "id", value = "用户ID(不传就是拿token查自己)")
    public R<User> info(@RequestParam(required = false) Long id) {
        return null;
    }

    @ApiOperation(value = "用户信息修改")
    @PostMapping("/update")
    public R update(@RequestBody User user) {
        return null;
    }
}