class Admission::Applicants::FamilyMedicalService < ApplicationService
  delegate :incomplete_fields, to: :medical_revision

  def initialize(applicant, application)
    @applicant = applicant
    @application = application
  end

  def props
    {}.tap do |props|
      display_fields = medical_fields.pluck(:field)
      props[:display_physician] = display_fields.include?('family_physician')
      props[:display_dentist] = display_fields.include?('family_dentist')
      props[:display_insurance] = display_fields.include?('family_insurance')
      props[:display_hospital] = display_fields.include?('preferred_hospital')

      if props[:display_physician]
        props[:physician] = medical_revision.physician
        props[:physician_phone] = medical_revision.physician_phone
        props[:physician_address] = medical_revision.physician_address
        props[:physician_address_ext] = medical_revision.physician_address_ext
        props[:physician_city] = medical_revision.physician_city
        props[:physician_state] = medical_revision.physician_state
        props[:physician_zip] = medical_revision.physician_zip
        props[:physician_country_id] = medical_revision.physician_country_id
      end

      if props[:display_dentist]
        props[:dentist] = medical_revision.dentist
        props[:dentist_phone] = medical_revision.dentist_phone
        props[:dentist_address] = medical_revision.dentist_address
        props[:dentist_address_ext] = medical_revision.dentist_address_ext
        props[:dentist_city] = medical_revision.dentist_city
        props[:dentist_state] = medical_revision.dentist_state
        props[:dentist_zip] = medical_revision.dentist_zip
        props[:dentist_country_id] = medical_revision.dentist_country_id
      end

      if props[:display_insurance]
        props[:insurance_company] = medical_revision.insurance_company
        props[:insurance_plan] = medical_revision.insurance_plan
        props[:insurance_group] = medical_revision.insurance_group
      end

      if props[:display_hospital]
        props[:hospital] = medical_revision.hospital
        props[:comments] = medical_revision.comments
      end
    end
  end

  def available?
    medical_fields.exists?
  end

  private
    def school
      @school ||= @application.school
    end

    def family
      @family ||= @applicant.family
    end

    def medical_revision
      @medical_revision ||= family.admission_medical_revisions
        .find_or_initialize_by(school_year: @application.school_year)
    end

    def medical_fields
      school.admission_medical_revision_fields.with_display
    end
end
