package com.cristobalbernal.foro.controlador;

import com.cristobalbernal.foro.Entidades.Foro;
import com.cristobalbernal.foro.Entidades.RespuestasEntity;
import com.cristobalbernal.foro.Entidades.UsersEntity;
import com.cristobalbernal.foro.Respositorios.IUsers;
import com.cristobalbernal.foro.Servicios.ServicioForo;
import com.cristobalbernal.foro.Servicios.ServicioRespuestas;
import com.cristobalbernal.foro.seguridad.models.UserDetailsImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class Controlador {
    @Autowired
    private IUsers iUsers;
    @Autowired
    private ServicioRespuestas servicioRespuestas;
    @Autowired
    private ServicioForo servicioForo;

    @GetMapping("/miperfil")
    public String miPerfil(Model model){
        UserDetailsImpl userDetails = (UserDetailsImpl) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        UsersEntity users = iUsers.findByEmail(userDetails.getUsername());
        model.addAttribute("nombre",users);
        return "miperfil/miperfil";
    }
    @GetMapping({"","/home","/"})
    public String indice(Model model){
        model.addAttribute("listaForo",servicioForo.init());
        return "index";
    }
    @GetMapping("/login")
    public String login(Model model){
        return "login/login";
    }
    @GetMapping("/registrar")
    public String registrar(){
        return "Registrar/Registrar";
    }
    @GetMapping("/crearPregunta")
    public String pregunta(){
        return "Ask_Question/ask_question";
    }

    @GetMapping("/postdetall/{id}")
    public String postDetall(@PathVariable int id,Model model){
        Foro foro = servicioForo.findById(id);
        List<RespuestasEntity> respuestas = servicioRespuestas.respuestasEntityList(id);
        model.addAttribute("Foro",foro);
        return "Respuestas/post-detall";
    }
    @GetMapping("/all")
    public @ResponseBody List<UsersEntity> getAllUsers(){
        return iUsers.findAll();
    }

    @PostMapping("/process_register")
    public String processRegister(UsersEntity user) {
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        String encodedPassword = passwordEncoder.encode(user.getPassword());
        user.setPassword(encodedPassword);
        iUsers.save(user);
        return "redirect:/home";
    }
}

