package com.platform2easy.genesis.web.controller;

import com.platform2easy.genesis.domain.model.Compra;
import com.platform2easy.genesis.domain.model.ItemCompra;
import com.platform2easy.genesis.domain.service.CompraService;
import lombok.AllArgsConstructor;
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.RequestMapping;

import java.util.Arrays;

@Controller
@RequestMapping("compra")
@AllArgsConstructor
public class CompraController {

    private final CompraService service;

    @GetMapping()
    public String iniciar(Compra compra, Model model) {
        return abrirFormulario(compra, "Comprar", model);
    }

    @PostMapping()
    public String inserir(Compra compra, ItemCompra itemCompra, Model model) {
        itemCompra.setId(null);

        if (compra.getItens() == null) compra.setItens(Arrays.asList(itemCompra));
        else compra.getItens().add(itemCompra);

        return iniciar(compra, model);
    }

    @PostMapping("{index}")
    public String removerItem(@PathVariable int index, Compra compra, Model model) {
        compra.getItens().remove(index);
        return iniciar(compra, model);
    }

    @GetMapping("editar/{id}")
    public String alterar(@PathVariable Long id, Model model) {
        return abrirFormulario(service.buscarPorId(id), "Editar Compra", model);
    }

    private String abrirFormulario(Compra compra, String titulo, Model model) {
        model.addAttribute("titulo", titulo);
        model.addAttribute("compra", compra);
        return "compra/formulario";
    }

    @PostMapping("salvar")
    public String salvar(Compra compra, Model model) {
        service.salvar(compra);
        return "redirect:/compra/listar";
    }

    @GetMapping("listar")
    public String listar(Model model) {
        model.addAttribute("titulo", "Compras");
        model.addAttribute("compras", service.listarTodos());
        return "compra/lista";
    }

    @GetMapping("remover/{id}")
    public String remover(@PathVariable Long id, Model model) {
        service.deletarPorId(id);
        return "redirect:/compra/listar";
    }
}
