package org.hso.ecommerce.controller;

import org.hso.ecommerce.entities.booking.PaymentMethod;
import org.hso.ecommerce.entities.shop.Address;
import org.hso.ecommerce.entities.user.User;
import org.hso.ecommerce.repos.user.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Optional;

@Controller
public class RegisterController  {

    @Autowired
    private final UserRepository userRepository = null;

    @PostMapping("/register")
    public String registerPost(
            HttpServletRequest request,
            HttpServletResponse response,
            @RequestParam("username") String username,
            @RequestParam("password") String password,
            @RequestParam("password2") String password2,
            @RequestParam("salutation") String salutation,
            @RequestParam("name") String name,
            @RequestParam("address") String address,
            @RequestParam("type") String type,
            @RequestParam("ad") String ad,
            HttpSession session
    )
    {
        Optional<User> user = userRepository.findByEmail(username);
        if (user.isPresent()) {
            request.setAttribute("error", "Email Adresse existiert bereits!");
            response.setStatus(HttpServletResponse.SC_EXPECTATION_FAILED);
            return "register";
        }

        if (!password.equals(password2)){
            request.setAttribute("error", "Passwörter sind nicht gleich");
            response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
            return "register";
        }

        //set values for new user
        User newUser = new User();
        newUser.email = username;
        newUser.setPassword(password);
        newUser.email = username;
        newUser.isEmployee = false;
        newUser.salutation = salutation;
        newUser.defaultPayment = PaymentMethod.fromCreditCardNumber("");

        newUser.isActive = true;
        newUser.created = new java.sql.Timestamp(System.currentTimeMillis());

        Address newAddress = new Address();
        newAddress.name = name;
        newAddress.addressString = address;
        newUser.defaultDeliveryAddress = newAddress;

        userRepository.save(newUser); // save newUser

        user = userRepository.findByEmail(username);
        session.setAttribute("userId", user.get().getId());

        return "redirect:/";
    }

    @GetMapping("/register")
    public String register() {
        return "register";
    }
}
