app/models/ruby_conversations/message_input.rb



# frozen_string_literal: true

require 'active_model'

module RubyConversations
  # Represents an input value for a message prompt
  class MessageInput
    include ActiveModel::Model

    # Define attributes
    attr_accessor :id, :message_prompt_id, :placeholder_name, :value,
                  :created_at, :updated_at

    # Validations
    validates :placeholder_name, presence: true
    validate :value_not_nil

    # Association-like methods
    def message_prompt=(prompt)
      @message_prompt = prompt
      @message_prompt_id = prompt&.id
    end

    attr_reader :message_prompt

    # Scopes
    def self.ordered
      all.sort_by(&:placeholder_name)
    end

    def self.all
      @all ||= []
    end

    # Attributes method for serialization/logging
    def attributes
      base_attributes
    end

    # Method for API serialization
    def attributes_for_api
      {
        id: id,
        placeholder_name: placeholder_name,
        value: value
      }.compact
    end

    private

    def value_not_nil
      errors.add(:value, "can't be blank") if value.nil?
    end

    def base_attributes
      {
        'id' => id,
        'message_prompt_id' => message_prompt_id,
        'placeholder_name' => placeholder_name,
        'value' => value,
        'created_at' => created_at,
        'updated_at' => updated_at
      }
    end
  end

  # Alias for compatibility with Zeitwerk
  AIMessageInput = MessageInput
end