class Admin::Admissions::Families::MedicalRevisionsController < Admin::Admissions::Controller
  include Admin::Admissions::FamilyScoped

  def show
    render_success :ok, json: revision_props(revision)
  end

  def update
    revision.add_custom_error(:base, 'Update has already been applied') if revision.applied

    if revision.update(revision_params)
      render_success :ok, object: 'Medical fields', json: revision_props(revision)
    else
      render_error :unprocessable_entity, errors: revision
    end
  end

  private
    def revision
      @revision ||= family.admission_medical_revisions
        .find_or_initialize_by(school_year: school_year)
    end

    def revision_params
      params.permit(Admission::MedicalRevision::MEDICAL_ATTRIBUTES)
    end

    def family_medical
      @family_medical ||= family.find_or_build_family_medical
    end

    def revision_props(revision)
      {
        name: family.name,
        physician: revision.physician,
        physician_phone: revision.physician_phone,
        physician_address: revision.physician_address,
        physician_address_ext: revision.physician_address_ext,
        physician_city: revision.physician_city,
        physician_state: revision.physician_state,
        physician_zip: revision.physician_zip,
        physician_country_id: revision.physician_country_id,
        dentist: revision.dentist,
        dentist_phone: revision.dentist_phone,
        dentist_address: revision.dentist_address,
        dentist_address_ext: revision.dentist_address_ext,
        dentist_city: revision.dentist_city,
        dentist_state: revision.dentist_state,
        dentist_zip: revision.dentist_zip,
        dentist_country_id: revision.dentist_country_id,
        insurance_company: revision.insurance_company,
        insurance_plan: revision.insurance_plan,
        insurance_group: revision.insurance_group,
        hospital: revision.hospital,
        comments: revision.comments,
        current_family: {
          physician: family_medical.physician,
          physician_phone: family_medical.physician_phone,
          physician_address: family_medical.physician_address,
          physician_address_ext: family_medical.physician_address_ext,
          physician_city: family_medical.physician_city,
          physician_state: family_medical.physician_state,
          physician_zip: family_medical.physician_zip,
          physician_country_id: family_medical.physician_country_id,
          dentist: family_medical.dentist,
          dentist_phone: family_medical.dentist_phone,
          dentist_address: family_medical.dentist_address,
          dentist_address_ext: family_medical.dentist_address_ext,
          dentist_city: family_medical.dentist_city,
          dentist_state: family_medical.dentist_state,
          dentist_zip: family_medical.dentist_zip,
          dentist_country_id: family_medical.dentist_country_id,
          insurance_company: family_medical.insurance_company,
          insurance_plan: family_medical.insurance_plan,
          insurance_group: family_medical.insurance_group,
          hospital: family_medical.hospital,
          comments: family_medical.comments
        }
      }
    end
end
