package com.TinyPro.controller;

import com.TinyPro.annotation.IsPublic;
import com.TinyPro.entity.dto.CreateAuthDto;
import com.TinyPro.entity.dto.LogoutAuthDto;
import com.TinyPro.entity.vo.MenuTreeVo;
import com.TinyPro.service.IAuthService;
import com.TinyPro.utils.JwtUtil;
import io.jsonwebtoken.Claims;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.function.ServerResponse;

import java.util.Map;

@RestController
@RequestMapping("/auth")
public class AuthController {
    @Autowired
    private IAuthService authService;
    @Autowired
    private JwtUtil jwtUtil;

    @IsPublic()
    @PostMapping("/login")
    public ResponseEntity<?> login(@RequestBody @Valid CreateAuthDto createAuthDto, HttpServletResponse response) throws Exception {
        return authService.login(createAuthDto, response);
    }

    @PostMapping("/logout")
    public String logout(@Valid @RequestBody LogoutAuthDto logoutAuthDto) {
        Claims claims = jwtUtil.parseJwt(logoutAuthDto.getToken());
        String email = (String) claims.get("email");
        return authService.logout(email);
    }

    @GetMapping("/test")
    public ResponseEntity<MenuTreeVo> gettext() {
        return ResponseEntity.ok(new MenuTreeVo());
    }
}