class Avo::Views::ResourceIndexComponent

def attach_path

def attach_path
  "#{Avo::App.root_path}#{request.env["PATH_INFO"]}/new"
end

def available_view_types

def available_view_types
  @index_params[:available_view_types]
end

def can_attach?

def can_attach?
  klass = @reflection
  klass = @reflection.through_reflection if klass.is_a? ::ActiveRecord::Reflection::ThroughReflection
  @reflection.present? && klass.is_a?(::ActiveRecord::Reflection::HasManyReflection) && !has_reflection_and_is_read_only && authorize_association_for('attach')
end

def can_create?

def can_create?
  @resource.authorization.authorize_action(:create, raise_exception: false) && simple_relation? && !has_reflection_and_is_read_only
end

def can_detach?

def can_detach?
  @reflection.present? && @reflection.is_a?(::ActiveRecord::Reflection::HasOneReflection) && @models.present? && !has_reflection_and_is_read_only && authorize_association_for('detach')
end

def create_path

def create_path
  if @reflection.present?
    path_args = {
      via_relation_class: @parent_model.model_name,
      via_resource_id: @parent_model.id
    }
    if @reflection.inverse_of.present?
      path_args[:via_relation] = @reflection.inverse_of.name
    end
    helpers.new_resource_path(@resource.model_class, **path_args)
  else
    helpers.new_resource_path(@resource.model_class)
  end
end

def detach_path

def detach_path
  helpers.resource_detach_path(via_resource_name, via_resource_id, via_relation_param, @models.first.id)
end

def has_reflection_and_is_read_only

def has_reflection_and_is_read_only
  if @reflection.present? && @reflection.active_record.name && @reflection.name
    fields = ::Avo::App.get_resource_by_model_name(@reflection.active_record.name).get_field_definitions
    filtered_fields = fields.filter{ |f| f.id == @reflection.name}
  else
    return false
  end
  if filtered_fields.present?
    is_field_read_only = filtered_fields.filter{ |f| f.id == @reflection.name}[0].readonly
  else
    is_field_read_only = false
  end
  is_field_read_only
end

def initialize(

def initialize(
  resource: nil,
  resources: nil,
  models: [],
  pagy: nil,
  index_params: {},
  filters: [],
  actions: [],
  reflection: nil,
  turbo_frame: "",
  parent_model: nil
)
  @resource = resource
  @resources = resources
  @models = models
  @pagy = pagy
  @index_params = index_params
  @filters = filters
  @actions = actions
  @reflection = reflection
  @turbo_frame = turbo_frame
  @parent_model = parent_model
end

def simple_relation?

def simple_relation?
  return @reflection.is_a? ::ActiveRecord::Reflection::HasManyReflection if @reflection.present?
  true
end

def singular_resource_name

def singular_resource_name
  if @reflection.present?
    @reflection.name.to_s.downcase.singularize
  else
    @resource.singular_name.present? ? @resource.singular_name : @resource.model_class.model_name.name.downcase
  end
end

def title

def title
  if @reflection.present?
    @reflection.plural_name.capitalize
  else
    @resource.plural_name
  end
end

def view_type

def view_type
  @index_params[:view_type]
end