-- Tabla para almacenar credenciales WebAuthn/Passkeys
CREATE TABLE IF NOT EXISTS webauthn_credentials (
    id_credential SERIAL PRIMARY KEY,
    fk_id_usuario INTEGER NOT NULL,
    credential_id TEXT NOT NULL UNIQUE,
    public_key TEXT NOT NULL,
    counter BIGINT NOT NULL DEFAULT 0,
    device_name VARCHAR(255),
    last_used TIMESTAMP,
    activo BOOLEAN DEFAULT true,
    f_reg TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    f_mod TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_usuario_webauthn FOREIGN KEY (fk_id_usuario) REFERENCES usuarios(id_usuario) ON DELETE CASCADE
);

-- Índices para mejorar el rendimiento
CREATE INDEX IF NOT EXISTS idx_webauthn_usuario ON webauthn_credentials(fk_id_usuario);
CREATE INDEX IF NOT EXISTS idx_webauthn_credential_id ON webauthn_credentials(credential_id);
CREATE INDEX IF NOT EXISTS idx_webauthn_activo ON webauthn_credentials(activo) WHERE activo = true;

-- Comentarios
COMMENT ON TABLE webauthn_credentials IS 'Almacena las credenciales WebAuthn/Passkeys de los usuarios';
COMMENT ON COLUMN webauthn_credentials.credential_id IS 'ID único de la credencial (base64url)';
COMMENT ON COLUMN webauthn_credentials.public_key IS 'Clave pública de la credencial (base64)';
COMMENT ON COLUMN webauthn_credentials.counter IS 'Contador para prevenir ataques de replay';
COMMENT ON COLUMN webauthn_credentials.device_name IS 'Nombre descriptivo del dispositivo (ej: iPhone de Juan)';
