1# frozen_string_literal: true
 2
 3require "json"
 4
 5require_relative "geo_code_repo"
 6
 7class AreaCodeRepo
 8	def initialize(db: DB, geo_code_repo: GeoCodeRepo.new)
 9		@db = db
10		@geo_code_repo = geo_code_repo
11	end
12
13	def find(q, limit: 3)
14		@geo_code_repo.find(q).then { |geo|
15			log.error "AreaCodeRepo#find(#{q.inspect})" unless geo.valid?
16			next [] unless geo.valid?
17
18			@db.query_defer(<<~SQL, [geo.country, geo.sql_point, limit])
19				SELECT area_code FROM area_codes
20				WHERE country=$1
21				ORDER BY location <-> $2
22				LIMIT $3
23			SQL
24		}.then { |rows| rows.map { |row| row["area_code"] } }
25	end
26end