ALTER TABLE entreprises
  ADD COLUMN IF NOT EXISTS latitude DOUBLE PRECISION,
  ADD COLUMN IF NOT EXISTS longitude DOUBLE PRECISION;

ALTER TABLE prestataire_demandes
  ADD COLUMN IF NOT EXISTS code_postal TEXT,
  ADD COLUMN IF NOT EXISTS ville TEXT,
  ADD COLUMN IF NOT EXISTS latitude DOUBLE PRECISION,
  ADD COLUMN IF NOT EXISTS longitude DOUBLE PRECISION;

CREATE TABLE IF NOT EXISTS adresse_cache_requetes (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  query_key TEXT NOT NULL UNIQUE,
  query_text TEXT NOT NULL,
  code_postal TEXT,
  ville TEXT,
  limit_value INTEGER NOT NULL DEFAULT 8,
  response_json JSONB NOT NULL DEFAULT '[]'::jsonb,
  source TEXT NOT NULL DEFAULT 'ign_geoplateforme',
  last_fetched_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE TABLE IF NOT EXISTS adresses_reference (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  source TEXT NOT NULL DEFAULT 'ign_geoplateforme',
  source_id TEXT NOT NULL,
  label TEXT NOT NULL,
  adresse TEXT,
  code_postal TEXT,
  ville TEXT,
  code_insee TEXT,
  rue TEXT,
  numero TEXT,
  contexte TEXT,
  latitude DOUBLE PRECISION,
  longitude DOUBLE PRECISION,
  search_text TEXT NOT NULL,
  created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
  CONSTRAINT adresses_reference_source_unique UNIQUE (source, source_id)
);

CREATE INDEX IF NOT EXISTS adresse_cache_requetes_fetched_idx
  ON adresse_cache_requetes (last_fetched_at DESC);

CREATE INDEX IF NOT EXISTS adresses_reference_code_postal_idx
  ON adresses_reference (code_postal);

CREATE INDEX IF NOT EXISTS adresses_reference_ville_idx
  ON adresses_reference (ville);
