class Admin::Legacy::Student::Students::DocumentsController < Admin::Legacy::Student::Controller
  def index
    data = student_documents.map { |d| document_props(d, :student_documents) }
    data += student_applicant_documents
      .map { |d| document_props(d, :admission_applicant_documents) }

    data += student_submitted_applications
      .map { |a| document_props(a, :admission_submitted_applications) }

    render_success :ok, json: data.sort_by { |d| d[:date] }.reverse
  end

  def destroy
    if student.send(params[:area]).find(params[:id]).destroy
      render_success :ok
    else
      render_error :unprocessable_entity
    end
  end

  private
    def student_documents
      student.student_documents.includes(:school_year)
    end

    def student_applicant_documents
      student.admission_applicant_documents.by_profile(true)
    end

    def student_submitted_applications
      student.admission_submitted_applications
    end

    def student
      @student ||= current_school.students.find_by(id: params[:student_id])
    end

    def document_props(document, area)
      {}.tap do |props|
        props[:id] = document.id
        props[:date] = document.created_at.to_date
        props[:area] = area
        if document.instance_of?(StudentDocument)
          props[:url] = document.service_url
          props[:name] = document.name
          props[:code] = document.code_label
          props[:school_year_name] = document.school_year&.name
        else
          file = document.instance_of?(ActiveStorage::Attachment) ? document : document.file
          props[:url] = file.service_url
          props[:name] = file.filename
          props[:code] = :Admissions
          props[:school_year_name] = file.record.school_year&.name
        end
        if area == :admission_applicant_documents
          props[:name] = document.document.display_name
        end
      end
    end
end
