class EdFi::Indiana::Sandbox::StaffDeleteService <
  EdFi::Indiana::Sandbox::ApplicationService
  def call
    # prevent deleting all staff records, just in case
    return false unless employee_number

    fail_flag = false
    section_records.each do |r|
      resp = rest_client_request(:delete, "#{api_url}/#{section_endpoint}/#{r}", nil)
      fail_flag = true if resp.nil?
    end
    contact_records.each do |r|
      resp = rest_client_request(:delete, "#{api_url}/#{contact_endpoint}/#{r}", nil)
      fail_flag = true if resp.nil?
    end
    employment_records.each do |r|
      resp = rest_client_request(:delete, "#{api_url}/#{employment_endpoint}/#{r}", nil)
      fail_flag = true if resp.nil?
    end
    !fail_flag # Checking if any deletes failed to complete
  end

  private
    def section_records
      records = rest_client_request(
        :get,
        "#{api_url}/#{section_endpoint}",
        nil,
        header_params: { params: { staffUniqueId: employee_number } }
      )
      records ? JSON.parse(records).map { |r| r['id'] } : []
    end

    def contact_records
      records = rest_client_request(
        :get,
        "#{api_url}/#{contact_endpoint}",
        nil,
        header_params: { params: { staffUniqueId: employee_number } }
      )
      records ? JSON.parse(records).map { |r| r['id'] } : []
    end

    def employment_records
      records = rest_client_request(
        :get,
        "#{api_url}/#{employment_endpoint}",
        nil,
        header_params: { params: { staffUniqueId: employee_number } }
      )
      records ? JSON.parse(records).map { |r| r['id'] } : []
    end

    def section_endpoint
      @section_endpoint ||= 'ed-fi/staffsectionassociations'
    end

    def contact_endpoint
      @contact_endpoint ||= 'ed-fi/staffeducationorganizationcontactassociations'
    end

    def employment_endpoint
      @employment_endpoint ||= 'ed-fi/staffeducationorganizationemploymentassociations'
    end

    def employee_number
      @employee_number ||= school.employees.find_by(id: @params[:employee_id])&.state_number&.number
    end
end
