# frozen_string_literal: true

module Api
  module V1
    class TaskSerializer < ActiveModel::Serializer
      include ApplicationHelper
      include ActionView::Helpers::TextHelper
      include InputSanitizeHelper

      type :tasks
      attributes :id, :name, :started_on, :due_date, :description, :state, :archived, :status_id, :status_name,
                 :prev_status_id, :prev_status_name, :next_status_id, :next_status_name, :x, :y
      has_many :output_tasks, key: :outputs,
                            serializer: TaskSerializer,
                            class_name: 'MyModule'
      has_many :input_tasks, key: :inputs,
                             serializer: TaskSerializer,
                             class_name: 'MyModule'
      has_many :task_comments, key: :comments, serializer: CommentSerializer

      include TimestampableModel

      def status_id
        object.my_module_status_id
      end

      def status_name
        object.my_module_status.name
      end

      def prev_status_id
        object.my_module_status.previous_status&.id
      end

      def prev_status_name
        object.my_module_status.previous_status&.name
      end

      def next_status_id
        object.my_module_status.next_status&.id
      end

      def next_status_name
        object.my_module_status.next_status&.name
      end

      def output_tasks
        object.my_modules
      end

      def input_tasks
        object.my_module_antecessors
      end

      def description
        if instance_options[:rte_rendering]
          custom_auto_link(object.tinymce_render(:description),
                           simple_format: false,
                           tags: %w(img),
                           team: instance_options[:team])
        else
          object.description
        end
      end
    end
  end
end