package com.ejie.ab61.control.terceros;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import com.ejie.ab61.model.terceros.CanalesAviso;
import com.ejie.ab61.service.terceros.CanalesAvisoService;

/**
 * CanalesAvisoController  
 * 
 *  
 */

@Controller
@RequestMapping(value = "/canalesaviso")

public class CanalesAvisoController {

	private static final Logger logger = LoggerFactory.getLogger(CanalesAvisoController.class);

	@Autowired
	private CanalesAvisoService canalesAvisoService;

	/*
	 * OPERACIONES CRUD (Create, Read, Update, Delete)
	 * 
	 */

	/**
	 * Operacion CRUD Read. Devuelve el bean correspondiente al identificador
	 * indicado.
	 * 
	 * @param idCanalAviso
	 *            Integer
	 * @return CanalesAviso Objeto correspondiente al identificador indicado.
	 */
	@RequestMapping(value = "/{idCanalAviso}", method = RequestMethod.GET)
	public @ResponseBody CanalesAviso get(@PathVariable Integer idCanalAviso) {
		CanalesAviso canalesAviso = new CanalesAviso();
		canalesAviso.setIdCanalAviso(idCanalAviso);
		canalesAviso = this.canalesAvisoService.find(canalesAviso);
		CanalesAvisoController.logger.info("[GET - findBy_PK] : Obtener CanalesAviso por PK");
		return canalesAviso;
	}

	/**
	 * Operacion CRUD Edit. Modificacion del bean indicado.
	 *
	 * @param canalesAviso
	 *            CanalesAviso Bean que contiene la informacion a modificar.
	 * @return CanalesAviso Bean resultante de la modificacion.
	 */
	@RequestMapping(method = RequestMethod.PUT)
	public @ResponseBody CanalesAviso edit(@RequestBody CanalesAviso canalesAviso) {
		CanalesAviso canalesAvisoAux = this.canalesAvisoService.update(canalesAviso);
		CanalesAvisoController.logger.info("[PUT] : CanalesAviso actualizado correctamente");
		return canalesAvisoAux;
	}

	/**
	 * Operacion CRUD Create. Creacion de un nuevo registro a partir del bean
	 * indicado.
	 *
	 * @param canalesAviso
	 *            CanalesAviso Bean que contiene la informacion con la que se va
	 *            a crear el nuevo registro.
	 * @return CanalesAviso Bean resultante del proceso de creacion.
	 */
	@RequestMapping(method = RequestMethod.POST)
	public @ResponseBody CanalesAviso add(@RequestBody CanalesAviso canalesAviso) {
		CanalesAviso canalesAvisoAux = this.canalesAvisoService.add(canalesAviso);
		CanalesAvisoController.logger.info("[POST] : CanalesAviso insertado correctamente");
		return canalesAvisoAux;
	}

	/**
	 * Operacion CRUD Delete. Borrado del registro correspondiente al
	 * identificador especificado.
	 *
	 * @param idCanalAviso
	 *            Integer Identificador del objeto que se desea eliminar.
	 * @return CanalesAviso Bean eliminado.
	 */
	@RequestMapping(value = "/{idCanalAviso}", method = RequestMethod.DELETE)
	@ResponseStatus(value = HttpStatus.OK)
	public @ResponseBody CanalesAviso remove(@PathVariable Integer idCanalAviso) {
		CanalesAviso canalesAviso = new CanalesAviso();
		canalesAviso.setIdCanalAviso(idCanalAviso);
		this.canalesAvisoService.remove(canalesAviso);
		CanalesAvisoController.logger.info("[DELETE] : CanalesAviso borrado correctamente");
		return canalesAviso;
	}

	/*
	 * METODOS COMPONENTE RUP_TABLE
	 * 
	 */

	/**
	 * Metodo de presentacion del RUP_TABLE.
	 * 
	 * @param model
	 *            Model
	 * @return String
	 */
	@RequestMapping(value = "/maint", method = RequestMethod.GET)
	public String getFormEdit(Model model) {
		CanalesAvisoController.logger.info("[GET - View] : canalesaviso");
		return "canalesaviso";
	}

}
