package com.nisum.demo.mongo.controller;

import com.nisum.demo.mongo.model.UserRequest;
import com.nisum.demo.mongo.model.UserResponse;
import com.nisum.demo.mongo.repository.model.User;
import com.nisum.demo.mongo.service.MongoDBDemoService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@RestController
public class MongoDBDemoController {

    private MongoDBDemoService mongoDBDemoService;

    public MongoDBDemoController(MongoDBDemoService mongoDBDemoService) {
        this.mongoDBDemoService = mongoDBDemoService;
    }

    @GetMapping(value = "/user/search/all", produces = {"application/json"})
    ResponseEntity<UserResponse> searchAllUsers() {
        UserResponse response = mongoDBDemoService.getAllUserData();
        return new ResponseEntity<>(response, HttpStatus.OK);
    }

    @GetMapping(value = "/user/search", produces = {"application/json"})
    ResponseEntity<UserResponse> searchUserById(@RequestParam(required = false) String byUserId,
                                                @RequestParam(required = false) String byUserFirstName) throws Exception {
        UserResponse response = mongoDBDemoService.getUserData(byUserId, byUserFirstName);
        return new ResponseEntity<>(response, HttpStatus.OK);
    }

    @PostMapping(value = "/user/add", consumes = {"application/json"}, produces = {"application/json"})
    ResponseEntity<UserResponse> addUser(@RequestBody UserRequest user) {
        mongoDBDemoService.addUser(user);
        return new ResponseEntity<UserResponse>(HttpStatus.OK);
    }

    @PostMapping(value = "/user/update", consumes = {"application/json"}, produces = {"application/json"})
    ResponseEntity<UserResponse> updateUser(@RequestBody UserRequest user) throws Exception {
        mongoDBDemoService.updateUser(user);
        return new ResponseEntity<UserResponse>(HttpStatus.OK);
    }

    @DeleteMapping(value = "/user", produces = {"application/json"})
    ResponseEntity<UserResponse> deleteUserById(@RequestParam String byUserId) {
        mongoDBDemoService.deleteUserById(byUserId);
        return new ResponseEntity<>(HttpStatus.OK);
    }

    @DeleteMapping(value = "/user/delete/all", produces = {"application/json"})
    ResponseEntity<UserResponse> deleteAll() {
        mongoDBDemoService.deleteAll();
        return new ResponseEntity<>(HttpStatus.OK);
    }
}