-- =====================================================================
-- ALTER tb_api — reorganização App ⇄ API (Ciclo 10, 2026-05-27)
-- Banco: w19_clikil41_eleicao
--
-- Sr. Diplomata pediu separação conceitual:
--   App  = catálogo (zapi, claude, chatgpt, ...) em tb_app
--   API  = instância concreta (token + chave) em tb_api, ligada via id_app
--
-- Mudanças:
--   ADD id_app          — FK pra tb_app (substitui api_service textual)
--   ADD api_model       — modelo dentro do app (ex: 'sonnet-4-7', 'gpt-4o'; null pra Z-API)
--   ADD api_email_conta — email da conta no provedor (subia de api_meta.email_conta pra coluna 1ª-classe)
--
-- Backfill:
--   api_service ('zapi') → id_app via JOIN tb_app
--   api_meta.email_conta  → api_email_conta
--
-- api_service mantida por compatibilidade durante transição — remover em ciclo
-- futuro quando todo o código usar id_app.
-- =====================================================================

ALTER TABLE `tb_api`
  ADD COLUMN `id_app`          SMALLINT UNSIGNED NULL AFTER `id_adm_user_owner`,
  ADD COLUMN `api_model`       VARCHAR(100) DEFAULT NULL AFTER `api_environment`,
  ADD COLUMN `api_email_conta` VARCHAR(150) DEFAULT NULL AFTER `api_label`,
  ADD INDEX `ix_api_app` (`id_app`),
  ADD CONSTRAINT `fk_api_app` FOREIGN KEY (`id_app`) REFERENCES `tb_app` (`id_app`) ON UPDATE CASCADE;

-- Backfill id_app a partir do api_service textual
UPDATE `tb_api` a
  JOIN `tb_app` p ON p.app_name = a.api_service
   SET a.id_app = p.id_app
 WHERE a.id_app IS NULL;

-- Backfill api_email_conta a partir do JSON api_meta.email_conta
UPDATE `tb_api`
   SET `api_email_conta` = JSON_UNQUOTE(JSON_EXTRACT(`api_meta`, '$.email_conta'))
 WHERE `api_email_conta` IS NULL
   AND `api_meta` IS NOT NULL
   AND JSON_VALID(`api_meta`)
   AND JSON_EXTRACT(`api_meta`, '$.email_conta') IS NOT NULL;
