-- SIREP v2 · PostgreSQL + pgvector
-- Requiere: CREATE EXTENSION vector;

CREATE TABLE IF NOT EXISTS actores (
  id BIGSERIAL PRIMARY KEY,
  nombre TEXT NOT NULL,
  rol TEXT,
  afinidad SMALLINT DEFAULT 0,   -- -100..100
  riesgo SMALLINT DEFAULT 0,     -- 0..100
  notas TEXT,
  creado_en TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE IF NOT EXISTS temas (
  id BIGSERIAL PRIMARY KEY,
  nombre TEXT NOT NULL UNIQUE,
  descripcion TEXT,
  prioridad SMALLINT DEFAULT 50, -- 0..100
  creado_en TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE IF NOT EXISTS interacciones (
  id BIGSERIAL PRIMARY KEY,
  fecha TIMESTAMPTZ NOT NULL DEFAULT now(),
  tipo TEXT NOT NULL,         -- chat|voz|doc|iot|email|cal
  resumen TEXT,
  transcript TEXT,
  sentimiento SMALLINT,       -- -100..100
  metadata JSONB DEFAULT '{}'::jsonb
);

CREATE TABLE IF NOT EXISTS interaccion_participantes (
  interaccion_id BIGINT REFERENCES interacciones(id) ON DELETE CASCADE,
  actor_id BIGINT REFERENCES actores(id) ON DELETE CASCADE,
  rol TEXT,
  PRIMARY KEY (interaccion_id, actor_id)
);

CREATE TABLE IF NOT EXISTS acciones_pendientes (
  id BIGSERIAL PRIMARY KEY,
  descripcion TEXT NOT NULL,
  responsable TEXT,
  deadline TIMESTAMPTZ,
  estado TEXT DEFAULT 'pendiente', -- pendiente|en_proceso|hecho|bloqueado
  prioridad SMALLINT DEFAULT 50,
  creado_en TIMESTAMPTZ DEFAULT now(),
  metadata JSONB DEFAULT '{}'::jsonb
);

CREATE TABLE IF NOT EXISTS activos (
  id BIGSERIAL PRIMARY KEY,
  nombre TEXT NOT NULL,
  categoria TEXT,
  ubicacion TEXT,
  estado TEXT,
  metadatos JSONB DEFAULT '{}'::jsonb,
  creado_en TIMESTAMPTZ DEFAULT now()
);

CREATE TABLE IF NOT EXISTS eventos_iot (
  id BIGSERIAL PRIMARY KEY,
  dispositivo TEXT NOT NULL,
  timestamp TIMESTAMPTZ NOT NULL DEFAULT now(),
  payload JSONB NOT NULL
);

CREATE TABLE IF NOT EXISTS relaciones_actores (
  actor_a BIGINT REFERENCES actores(id) ON DELETE CASCADE,
  actor_b BIGINT REFERENCES actores(id) ON DELETE CASCADE,
  tipo TEXT,                -- familia|negocio|politica|amistad|conflicto|etc
  friccion SMALLINT DEFAULT 0,   -- 0..100
  confianza SMALLINT DEFAULT 50, -- 0..100
  notas TEXT,
  PRIMARY KEY (actor_a, actor_b)
);

CREATE TABLE IF NOT EXISTS actor_tema (
  actor_id BIGINT REFERENCES actores(id) ON DELETE CASCADE,
  tema_id BIGINT REFERENCES temas(id) ON DELETE CASCADE,
  postura TEXT,
  relevancia SMALLINT DEFAULT 50,
  PRIMARY KEY (actor_id, tema_id)
);

-- Documentos / adjuntos (inventario + versionado)
CREATE TABLE IF NOT EXISTS documentos (
  id BIGSERIAL PRIMARY KEY,
  nombre TEXT NOT NULL,
  tipo TEXT,
  origen TEXT,          -- drive|local|chat|email|url
  ref TEXT,             -- path/url/id externo
  hash_sha256 TEXT,
  texto_extraido TEXT,
  metadata JSONB DEFAULT '{}'::jsonb,
  creado_en TIMESTAMPTZ DEFAULT now()
);

-- Embeddings (pgvector)
-- dimension ejemplo 1536 (OpenAI) o 768 (modelo local)
CREATE TABLE IF NOT EXISTS embeddings (
  id BIGSERIAL PRIMARY KEY,
  documento_id BIGINT REFERENCES documentos(id) ON DELETE CASCADE,
  chunk_index INT NOT NULL,
  contenido TEXT NOT NULL,
  embedding VECTOR(768),
  metadata JSONB DEFAULT '{}'::jsonb
);

CREATE INDEX IF NOT EXISTS idx_embeddings_doc ON embeddings(documento_id);

