package com.cristobalbernal.foro.controlador;

import com.cristobalbernal.foro.Entidades.CategoriaForoEntity;
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.ServicioCategoria;
import com.cristobalbernal.foro.Servicios.ServicioForo;
import com.cristobalbernal.foro.Servicios.ServicioRespuestas;
import com.cristobalbernal.foro.seguridad.models.UserDetailsImpl;
import org.apache.commons.logging.Log;
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.*;

import java.util.List;

@Controller
public class Controlador {
    @Autowired
    private IUsers iUsers;
    @Autowired
    private ServicioRespuestas servicioRespuestas;
    @Autowired
    private ServicioCategoria servicioCategoria;
    @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());
        model.addAttribute("totalForo",servicioForo.init().size());
        model.addAttribute("totalRespuestas",servicioRespuestas.findAll().size());
        model.addAttribute("listaCategorias",servicioCategoria.findAll());
        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(Model model){
        model.addAttribute("foro",new Foro());
        return "Ask_Question/ask_question";
    }
    @PostMapping("ask_question/add/submit")
    public String addForo(@ModelAttribute("foro") Foro foro){
        foro.setCategoriaForoId(1);
        servicioForo.add(foro);
        return "redirect:/home";
    }

    @PostMapping("/postdetall/add/submit/{id}")
    public String addRespuesta(@ModelAttribute("respuesta") RespuestasEntity respuestas, @PathVariable int id){
        respuestas.setForoId(id);
        respuestas.setRespuestasId(respuestas);
        respuestas.setUsersId(1);
        servicioRespuestas.save(respuestas);
        return "redirect:/postdetall/" + id;
    }
    @GetMapping("/postdetall/{id}")
    public String postDetall(@PathVariable int id,Model model){
        Foro foro = servicioForo.findById(id);
        List<RespuestasEntity> respuestas = servicioRespuestas.respuestasEntityList(id);
        model.addAttribute("listaRespuestas",respuestas);
        model.addAttribute("Foro",foro);
        model.addAttribute("respuesta",new RespuestasEntity());
        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";
    }
}

