# frozen_string_literal: true

class LabelPrintersController < ApplicationController
  include InputSanitizeHelper

  before_action :find_label_printer, only: %i(edit update destroy)

  def index
    @label_printers = LabelPrinter.all
  end

  def new
    @label_printer = LabelPrinter.new
  end

  def edit; end

  def create
    @label_printer = LabelPrinter.new(label_printer_params)

    if @label_printer.save
      flash[:success] = t('label_printers.create.success', { printer_name: @label_printer.name })
      redirect_to edit_label_printer_path(@label_printer)
    else
      flash[:error] = t('label_printers.create.error', { printer_name: @label_printer.name })
      render :new
    end
  end

  def update
    if @label_printer.update(label_printer_params)
      flash[:success] = t('label_printers.update.success', { printer_name: @label_printer.name })
      redirect_to edit_label_printer_path(@label_printer)
    else
      flash[:error] = t('label_printers.update.error', { printer_name: @label_printer.name })
      render :edit
    end
  end

  def destroy
    if @label_printer.destroy
      flash[:success] = t('label_printers.destroy.success', { printer_name: @label_printer.name })
    else
      flash[:error] = t('label_printers.destroy.error', { printer_name: @label_printer.name })
    end

    redirect_to addons_path
  end

  def create_fluics
    # Placeholder for FLUICS printer management

    LabelPrinters::Fluics::ApiClient.new(params[:fluics_api_key]).list.each do |fluics_printer|
      label_printer = LabelPrinter.find_or_initialize_by(
        fluics_api_key: params[:fluics_api_key],
        fluics_lid: fluics_printer['LID'],
        type_of: :fluics,
        language_type: :zpl
      )

      label_printer.update(name: fluics_printer['serviceName'])
    end

    redirect_to addons_path
  end

  private

  def label_printer_params
    params.require(:label_printer).permit(
      :name, :type_of, :fluics_api_key, :host, :port
    )
  end

  def find_label_printer
    @label_printer = LabelPrinter.find(params[:id])
  end
end