ALTER TABLE "sites" ADD COLUMN "gsc_authorized_account_id" text;--> statement-breakpoint
-- Backfill : épingle, pour chaque site déjà doté d'une autorité (migration
-- 0070), LEQUEL des comptes Google de cette autorité doit être interrogé.
-- Sans cette colonne, Better Auth refait sa propre sélection arbitraire à
-- l'émission du jeton (account.mjs:270, `find(acc => acc.providerId === ...)`)
-- : un site pouvait se dériver « ok » puis recevoir le jeton d'un compte sans
-- droit sur sa propriété — 403 Google opaque au lieu d'une raison typée.
--
-- Même regex que 0070, donc même règle que hasWebmastersScope : découpage sur
-- virgules OU espaces, égalité de jeton entière. Seuls les comptes PORTEURS du
-- scope sont candidats — un compte sans scope épinglé ne résoudrait jamais
-- rien. Ordre total (created_at puis account_id) : pas de ligne arbitraire.
--
-- Pas de clé étrangère sur la colonne : elle porte account.account_id
-- (l'identifiant Google), pas account.id. La disparition du compte doit se
-- traduire par un échec typé no-google-account, pas par une erreur de
-- contrainte.
--
-- Borné aux lignes NULL, comme 0070 : une ré-exécution manuelle ne doit pas
-- écraser (ni remettre à NULL) un compte choisi depuis l'UI.
UPDATE sites s SET gsc_authorized_account_id = (
  SELECT a.account_id FROM account a
  WHERE a.user_id = s.gsc_authorized_user_id
    AND a.provider_id = 'google'
    AND a.scope ~ '(^|[[:space:],])https://www\.googleapis\.com/auth/webmasters\.readonly([[:space:],]|$)'
  ORDER BY a.created_at, a.account_id
  LIMIT 1
) WHERE s.gsc_authorized_user_id IS NOT NULL
  AND s.gsc_authorized_account_id IS NULL;
