package br.edu.ufcg.computacao.si1.controller;

import br.edu.ufcg.computacao.si1.model.Anuncio;
import br.edu.ufcg.computacao.si1.model.Usuario;
import br.edu.ufcg.computacao.si1.model.Anuncio.AnuncioBuilder;
import br.edu.ufcg.computacao.si1.model.form.AnuncioForm;
import br.edu.ufcg.computacao.si1.service.AnuncioServiceImpl;
import br.edu.ufcg.computacao.si1.service.UsuarioServiceImpl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import javax.validation.Valid;

@Controller
public class CompanyAnuncioController {

    @Autowired
    private AnuncioServiceImpl anuncioService;
    @Autowired
    private UsuarioServiceImpl usuarioService;

    @RequestMapping(value = "/company/cadastrar/anuncio", method = RequestMethod.GET)
    public ModelAndView getPageCadastarAnuncio(AnuncioForm anuncioForm){
        ModelAndView model = new ModelAndView();
        model.addObject("usuario", usuarioService.getUsuarioLogado());

        model.addObject("tipos", anuncioForm.getTipos());
        model.setViewName("company/cadastrar_anuncio");

        return model;
    }

    @RequestMapping(value = "/company/listar/anuncios", method = RequestMethod.GET)
    public ModelAndView getPageListarAnuncios(){
        ModelAndView model = new ModelAndView();

        model.addObject("anuncios", anuncioService.getAnuncioRepository().findAll());
        model.addObject("usuario", usuarioService.getUsuarioLogado());

        model.setViewName("company/listar_anuncios");

        return model;
    }

    @RequestMapping(value = "/company/cadastrar/anuncio", method = RequestMethod.POST)
    public ModelAndView cadastroAnuncio(@Valid AnuncioForm anuncioForm, BindingResult result, RedirectAttributes attributes){
        if(result.hasErrors()){
            return getPageCadastarAnuncio(anuncioForm);
        }

        String titulo = anuncioForm.getTitulo();
        double preco = anuncioForm.getPreco();
        String tipo = anuncioForm.getTipo();
        Usuario anunciante = usuarioService.getUsuarioLogado();

        Anuncio anuncio = new AnuncioBuilder(titulo,preco,tipo, anunciante).build();

        anuncioService.create(anuncio);

        attributes.addFlashAttribute("mensagem", "Anúncio cadastrado com sucesso!");
        return new ModelAndView("redirect:/company/cadastrar/anuncio");
    }


}

@@ -677,16 +677,77 @@
 Method;%0A
+import org.springframework.web.bind.annotation.RequestParam;%0A
 import o
@@ -2730,12 +2730,697 @@
 ;%0A    %7D%0A
+    %0A    @RequestMapping(value = %22/company/listar/comprar/anuncio%22, method = RequestMethod.POST)%0A    public ModelAndView comprarAnuncio(RedirectAttributes attributes,%0A    %09%09@RequestParam(value = %22idAnuncio%22) long idAnuncio)%7B   %0A    %09%0A    %09Anuncio anuncio = anuncioService.getById(idAnuncio).get();%0A    %09%0A    %09Usuario vendedor = anuncio.getAnunciante();%0A    %09    %09%0A    %09Usuario comprador = usuarioService.getUsuarioLogado();%0A    %09%0A    %09double valorAnuncio = anuncio.getPreco();%0A    %09%0A    %09comprador.debitar(valorAnuncio);%0A    %09%0A    %09vendedor.creditar(valorAnuncio);%0A    %09%0A    %09anuncioService.delete(idAnuncio);%0A %0A    %09return new ModelAndView(%22redirect:/company/listar/anuncios%22);%0A    %7D%0A
 %0A%0A%7D%0A

Implementa compra de anúncios para usuários pessoa jurídica