-- CMSEGSB-PRO - Banco novo SQLite
-- Arquivo principal: /var/www/html/api/database/cmseg_erp.sqlite
PRAGMA foreign_keys=ON;
PRAGMA journal_mode=WAL;

CREATE TABLE IF NOT EXISTS empresas (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, nome TEXT NOT NULL, documento TEXT, telefone TEXT, email TEXT, endereco TEXT, logo TEXT, assinatura TEXT, ativo INTEGER DEFAULT 1, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS usuarios (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, nome TEXT NOT NULL, login TEXT UNIQUE, senha_hash TEXT, perfil TEXT DEFAULT 'tecnico', telefone TEXT, email TEXT, ativo INTEGER DEFAULT 1, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS clientes (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, nome TEXT NOT NULL, documento TEXT, telefone TEXT, email TEXT, endereco TEXT, cidade TEXT, bairro TEXT, observacoes TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS equipamentos (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, cliente_uuid TEXT, nome TEXT NOT NULL, tipo TEXT, marca TEXT, modelo TEXT, patrimonio TEXT, serial TEXT, ip TEXT, porta TEXT, usuario TEXT, senha TEXT, local TEXT, status TEXT DEFAULT 'ativo', ultimo_ping TEXT, observacoes TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS chamados (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, numero TEXT UNIQUE, cliente_uuid TEXT, cliente_nome TEXT, solicitante TEXT, telefone TEXT, origem TEXT DEFAULT 'portal', prioridade TEXT DEFAULT 'normal', status TEXT DEFAULT 'aberto', descricao TEXT, equipamento TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS ordens_servico (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, numero TEXT UNIQUE, chamado_uuid TEXT, cliente_uuid TEXT, cliente_nome TEXT, solicitante TEXT, telefone TEXT, endereco TEXT, tipo_servico TEXT, descricao TEXT, tecnico TEXT, prioridade TEXT DEFAULT 'normal', status TEXT DEFAULT 'aberta', valor REAL DEFAULT 0, financeiro_status TEXT DEFAULT 'sem_valor', data_abertura TEXT, data_inicio TEXT, data_fim TEXT, assinatura_cliente TEXT, observacoes TEXT, payload_json TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS os_itens (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, os_uuid TEXT, produto_uuid TEXT, descricao TEXT, quantidade REAL DEFAULT 1, valor_unitario REAL DEFAULT 0, valor_total REAL DEFAULT 0, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS os_fotos (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, os_uuid TEXT, caminho TEXT, legenda TEXT, tipo TEXT DEFAULT 'foto', created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS produtos (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, codigo TEXT, nome TEXT NOT NULL, unidade TEXT DEFAULT 'UN', categoria TEXT, preco_custo REAL DEFAULT 0, preco_venda REAL DEFAULT 0, estoque_minimo REAL DEFAULT 0, ativo INTEGER DEFAULT 1, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS estoque (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, produto_uuid TEXT, quantidade REAL DEFAULT 0, local TEXT DEFAULT 'principal', updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS movimentacao_estoque (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, produto_uuid TEXT, tipo TEXT, quantidade REAL DEFAULT 0, origem TEXT, referencia_uuid TEXT, observacao TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP);
CREATE TABLE IF NOT EXISTS financeiro (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, tipo TEXT DEFAULT 'receita', descricao TEXT, cliente_uuid TEXT, os_uuid TEXT, valor REAL DEFAULT 0, vencimento TEXT, pagamento TEXT, forma_pagamento TEXT, status TEXT DEFAULT 'aberto', observacoes TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS recebimentos (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, financeiro_uuid TEXT, usuario_uuid TEXT, valor REAL DEFAULT 0, percentual REAL DEFAULT 0, data_recebimento TEXT, status TEXT DEFAULT 'pendente', observacoes TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS notificacoes (id INTEGER PRIMARY KEY AUTOINCREMENT, uuid TEXT UNIQUE, titulo TEXT, mensagem TEXT, tipo TEXT, lida INTEGER DEFAULT 0, usuario_uuid TEXT, created_at TEXT DEFAULT CURRENT_TIMESTAMP, updated_at TEXT DEFAULT CURRENT_TIMESTAMP, deleted_at TEXT);
CREATE TABLE IF NOT EXISTS configuracoes (id INTEGER PRIMARY KEY AUTOINCREMENT, chave TEXT UNIQUE, valor TEXT, updated_at TEXT DEFAULT CURRENT_TIMESTAMP);

-- Compatibilidade com app atual/sync antigo
CREATE TABLE IF NOT EXISTS registros (id INTEGER PRIMARY KEY AUTOINCREMENT,tipo TEXT NOT NULL,registro_id TEXT NOT NULL UNIQUE,titulo TEXT,status TEXT,responsavel TEXT,payload TEXT NOT NULL,atualizado_em TEXT NOT NULL,criado_em TEXT DEFAULT CURRENT_TIMESTAMP,deleted_at TEXT);
CREATE TABLE IF NOT EXISTS backups (id INTEGER PRIMARY KEY AUTOINCREMENT,device TEXT,sent_at TEXT,payload TEXT,created_at TEXT DEFAULT CURRENT_TIMESTAMP);
CREATE TABLE IF NOT EXISTS deletados (id INTEGER PRIMARY KEY AUTOINCREMENT,tipo TEXT NOT NULL,registro_id TEXT NOT NULL UNIQUE,motivo TEXT,device TEXT,deletado_em TEXT DEFAULT CURRENT_TIMESTAMP);
CREATE TABLE IF NOT EXISTS logs (id INTEGER PRIMARY KEY AUTOINCREMENT,usuario TEXT,acao TEXT NOT NULL,tipo TEXT,registro_id TEXT,titulo TEXT,detalhes TEXT,device TEXT,ip TEXT,gps TEXT,criado_em TEXT DEFAULT CURRENT_TIMESTAMP);
CREATE TABLE IF NOT EXISTS tecnicos_online (id INTEGER PRIMARY KEY AUTOINCREMENT,usuario TEXT UNIQUE,device TEXT,ip TEXT,gps TEXT,ultima_sync TEXT,status TEXT DEFAULT 'online');
CREATE TABLE IF NOT EXISTS pdf_documentos (id INTEGER PRIMARY KEY AUTOINCREMENT,doc_id TEXT NOT NULL UNIQUE,tipo TEXT NOT NULL,numero TEXT,cliente TEXT,titulo TEXT,status TEXT DEFAULT 'ativo',dados_json TEXT NOT NULL,pdf_url TEXT,versao INTEGER DEFAULT 1,criado_por TEXT,atualizado_por TEXT,criado_em TEXT DEFAULT CURRENT_TIMESTAMP,atualizado_em TEXT DEFAULT CURRENT_TIMESTAMP);

CREATE INDEX IF NOT EXISTS idx_registros_tipo ON registros(tipo);
CREATE INDEX IF NOT EXISTS idx_registros_status ON registros(status);
CREATE INDEX IF NOT EXISTS idx_os_status ON ordens_servico(status);
CREATE INDEX IF NOT EXISTS idx_clientes_nome ON clientes(nome);

INSERT OR IGNORE INTO configuracoes(chave,valor) VALUES('versao_banco','cmseg_erp_v1');
INSERT OR IGNORE INTO configuracoes(chave,valor) VALUES('tema','vermelho_preto');
INSERT OR IGNORE INTO configuracoes(chave,valor) VALUES('token_sync','cmseg123');
