-- 002_create_clients_table.sql
-- Cartera del usuario, proyectada desde {esquema_distribuidor}.clients de PostgreSQL.
--
-- CLAVE COMPUESTA, NO `id` A SECAS. `clients` vive en el esquema de cada
-- distribuidor y los ids NO son unicos entre esquemas: medido, 1.102 ids se
-- repiten entre cefa e importfarma. Con un `id` simple como PK, una visita al
-- cliente 500 de CEFA se uniria al cliente 500 de Importfarma. Y los usuarios
-- trabajan con tres distribuidores a la vez, asi que no es un caso teorico.

CREATE TABLE IF NOT EXISTS clients (
    id_distributor  INTEGER NOT NULL,
    id              INTEGER NOT NULL,

    first_name      TEXT,
    last_name       TEXT,
    business_name   TEXT,
    -- Proyectado por el sincronizador: razon social si existe, si no nombre y
    -- apellido. Evita que cada consulta repita el mismo COALESCE.
    display_name    TEXT NOT NULL DEFAULT '',

    id_client_type  INTEGER,
    rating          TEXT,
    district_id     INTEGER,
    identification  TEXT,
    tax_document    TEXT,
    phone           TEXT,
    email           TEXT,
    medical_specialty_id INTEGER,
    is_prescriber   INTEGER NOT NULL DEFAULT 0,
    is_buyer        INTEGER NOT NULL DEFAULT 0,
    id_visitor      INTEGER,
    erp_client_id   TEXT,

    version         INTEGER NOT NULL DEFAULT 0,
    created_at      TEXT,
    updated_at      TEXT,
    deleted_at      TEXT,

    PRIMARY KEY (id_distributor, id)
);

CREATE INDEX IF NOT EXISTS idx_clients_display_name ON clients(display_name COLLATE NOCASE) WHERE deleted_at IS NULL;
CREATE INDEX IF NOT EXISTS idx_clients_distributor  ON clients(id_distributor)              WHERE deleted_at IS NULL;
CREATE INDEX IF NOT EXISTS idx_clients_erp          ON clients(erp_client_id)               WHERE erp_client_id IS NOT NULL;
