module Licitacao
  class DocumentosDoEtpController < ApplicationController
    include ControllerConcern
    include DocumentosDoEtpHelper
    protect_from_forgery except: :retorna_modelo
    before_action :authenticate_usuario!
    before_action :autoriza_usuario!, except: [:retorna_modelo]
    before_action :set_documento_do_etp, only: [:show, :edit, :update, :destroy]
    before_action :set_etp, only: [:new, :create, :retorna_modelo, :show, :edit, :modelos]
    # GET /licitacao/documentos_do_etp
    def index
      @q = Licitacao::DocumentoDoEtp.order(:id).search(params[:q])
      @documento_do_etp = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
    end
    
    def show
    end
    # GET /licitacao/documentos_do_etp/new
    
    def new
      @documento_do_etp = @etp.documentos_do_etp.new
      disponibiliza_dependencias
    end
    # GET /licitacao/documentos_do_etp/1/edit
    
    def edit
      disponibiliza_dependencias
    end
    # POST /licitacao/documentos_do_etp
    
    def create
      @documento_do_etp = @etp.documentos_do_etp.new(documento_do_etp_params)
      if @documento_do_etp.save
        redirect_to @documento_do_etp.etp, notice: 'Documento do etp foi criado(a) com sucesso.'
      else
        disponibiliza_dependencias
        render :new
      end
    end
    # PATCH/PUT /licitacao/documentos_do_etp/1
    
    def update
      if @documento_do_etp.update(documento_do_etp_params)
        redirect_to @documento_do_etp.etp, notice: 'Documento do etp foi atualizado(a) com sucesso.'
      else
        disponibiliza_dependencias
        render :edit
      end
    end
    # DELETE /licitacao/documentos_do_etp/1
    
    def destroy
      mensagem = apaga_e_retorna_mensagem(@documento_do_etp)
      redirect_to licitacao_etp_path(@documento_do_etp.etp), mensagem
    end
    
    def retorna_modelo
      return if bloqueia_usuario_com_base_em 'create'
      @modelo = Licitacao::ModeloDeDocumento.find(params[:modelo_id])
      @configuracao = Configuracao.last
  
      respond_to do |format|
        format.js
      end
    end
    
    def modelos
      
			@modelos = Licitacao::ModeloDeDocumento.where(lei: params[:lei])
      
      respond_to do |format|
        format.html # para renderizar um template se necessário
        format.json { render json: @modelos.map { |modelo| { id: modelo.id, titulo: modelo.titulo } } } # para retornar JSON
      end
    end
    
    private
    
    def set_etp
			@etp = Licitacao::Etp.find(params[:etp_id])
    end
    def set_documento_do_etp
      @documento_do_etp = Licitacao::DocumentoDoEtp.find(params[:id])
    end
    
    def disponibiliza_dependencias
      @tipos_de_documentos_dos_etps = Licitacao::DocumentoDoEtp.tipos_de_documento
      @modelos_de_documentos = Licitacao::ModeloDeDocumento.all
      @leis = Licitacao::ModeloDeDocumento.leis
    end
    
    def documento_do_etp_params
      params.require(:licitacao_documento_do_etp).permit(:data_do_documento, :texto, :usuario_id, :etp_id, :documento, :modelo_do_documento_id, :numero, :titulo_personalizado)
    end
  end
end