-- Migration v80: FHIR/HL7 R4 API — Tokens de acesso
-- Implementa autenticação via Bearer Token para a REST API FHIR R4

CREATE TABLE IF NOT EXISTS `fhir_tokens` (
  `id`             INT(11)      NOT NULL AUTO_INCREMENT,
  `clinica_id`     INT(11)      NOT NULL,
  `nome`           VARCHAR(100) NOT NULL COMMENT 'Nome do sistema cliente (ex: App Mobile, RNDS)',
  `token_hash`     VARCHAR(64)  NOT NULL COMMENT 'SHA-256 do token raw — indexado para lookup O(1)',
  `escopos`        VARCHAR(500) NOT NULL DEFAULT '*' COMMENT 'Ex: patient/*.read appointment/*.read',
  `rate_limit`     SMALLINT     NOT NULL DEFAULT 100 COMMENT 'Max requests por dia',
  `requests_hoje`  INT          NOT NULL DEFAULT 0,
  `ultimo_reset`   DATE         NOT NULL DEFAULT CURDATE(),
  `ativo`          TINYINT(1)   NOT NULL DEFAULT 1,
  `ultimo_uso`     DATETIME     DEFAULT NULL,
  `criado_por`     INT(11)      DEFAULT NULL,
  `criado_em`      DATETIME     NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_fhir_token_hash` (`token_hash`),
  KEY `idx_fhir_clinica` (`clinica_id`, `ativo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
  COMMENT='Tokens de acesso para API FHIR R4';

-- Permissão de administração da API FHIR
INSERT IGNORE INTO `permissoes` (`chave`, `nome`, `descricao`) VALUES
('fhir_admin', 'FHIR API — Administrar', 'Gerenciar tokens e configurações da API FHIR/HL7 R4');

-- Conceder ao perfil administrador (id=1)
INSERT IGNORE INTO `perfil_permissoes` (`perfil_id`, `permissao_id`)
SELECT p.id, pm.id FROM `perfis` p, `permissoes` pm
WHERE p.id = 1 AND pm.chave = 'fhir_admin';
