package com.ufund.api.ufundapi.controller;

import com.ufund.api.ufundapi.model.UserAuth;
import com.ufund.api.ufundapi.persistence.UserAuthDAO;
import com.ufund.api.ufundapi.persistence.UserDAO;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.io.IOException;
import java.util.Map;

@RestController
@RequestMapping("auth")
public class AuthController {
    private final UserDAO userDAO;
    private final UserAuthDAO userAuthDAO;

    public AuthController(UserDAO userDAO, UserAuthDAO userAuthDAO) {
        this.userDAO = userDAO;
        this.userAuthDAO = userAuthDAO;
    }

    /**
     * Attempts to log in as a user
     * @param params A map/json object in the format {username: string, password: string}
     * @return An api key if the auth was successful, null otherwise
     */
    @PostMapping("")
    public ResponseEntity<String> login(@RequestBody Map<String, String> params) {
        String username = params.get("username");
        String password = params.get("password");
        try {
            var usr = userDAO.getUser(username);
            if (usr == null || !usr.verifyPassword(password)) {
                return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
            }
            var userAuth = UserAuth.generate(username);
            userAuthDAO.addUserAuth(userAuth);
            return new ResponseEntity<>(userAuth.getKey(), HttpStatus.OK);
        } catch (IOException ex) {
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    /**
     * TODO
     * @return
     */
    @DeleteMapping("")
    public ResponseEntity<Object> logout() {
        return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
    }
}