-- =============================================
-- BANCO DE DADOS: hubglpi
-- DESCRIÇÃO: Sistema de integração entre HubSoft e GLPI
-- OBS: Chamados sempre são abertos pelo HubSoft
-- =============================================


-- =============================================
-- TABELA: hubsoft_tickets
-- DESCRIÇÃO: Armazena os chamados originados do HubSoft
-- =============================================
CREATE TABLE hubsoft_tickets (
    id SERIAL PRIMARY KEY,
    protocolo VARCHAR(50) UNIQUE NOT NULL,
    descricao_abertura TEXT NOT NULL,
    descricao_fechamento TEXT,
    tipo_atendimento VARCHAR(100),
    cliente_codigo INTEGER NOT NULL,
    cliente_nome VARCHAR(255) NOT NULL,
    servico_id VARCHAR(50),
    servico_nome VARCHAR(255),
    data_abertura TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    data_fechamento TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- =============================================
-- TABELA: sync_data
-- DESCRIÇÃO: Armazena o estado da sincronização entre HubSoft e GLPI
-- =============================================

CREATE TABLE sync_logs (
    id SERIAL PRIMARY KEY,
    hubsoft_ticket_id INTEGER NOT NULL REFERENCES hubsoft_tickets(id),
    glpi_ticket_id INTEGER,
    source_last source_last_enum DEFAULT 'hubsoft',
    status_sync status_sync_enum DEFAULT 'pending_create',
    sync_metadata JSONB,
    last_sync_attempt TIMESTAMP,
    sync_error_message TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    UNIQUE (hubsoft_ticket_id, glpi_ticket_id)
);

CREATE TYPE source_last_enum AS ENUM ('hubsoft', 'glpi');
CREATE TYPE status_sync_enum AS ENUM (
    'pending_create', 
    'created_glpi', 
    'pending_close', 
    'closed_glpi', 
    'sync_error', 
    'need_update'
);

