-- =============================================================================
-- sar_views.sql
-- Views PostgreSQL do projeto SAR — schema `sar` no banco ERP (libreplast)
--
-- Executar como: psql -U postgres -d libreplast -f sar_views.sql
--
-- DECISÃO DE ARQUITETURA: todas as views residem no schema `sar` (mesmo schema
-- das tabelas Prisma). O search_path da conexão runtime é `sar`, portanto as
-- queries do backend usam os nomes curtos (vw_clientes, vw_pedidos_erp).
--
-- ERP base: SIG (schema sig.*)
--   Empresa gerencial: id_empresa = 1  (gestao.empresa)
--   Empresa fiscal:    id_empresa = 9001 (sig.corrent / sig.pedidos)
--   Cancelados SIG:    situa = 5  (≠ SAR que usa situa = 3)
--   Faturados SIG:     situa = 4  (coincide com SAR)
-- =============================================================================

-- ---------------------------------------------------------------------------
-- 1. CLIENTES
--    Fonte: sig.corrent
--    Obs: COALESCE(id_empresa, 1) cobre registros antigos sem id_empresa.
--         cod_vendedor determina a carteira do representante.
-- ---------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_clientes AS
SELECT
    COALESCE(c.id_empresa, 1)                                AS id_empresa,
    c.id_corrent                                             AS id_cliente,
    c.ativo,
    COALESCE(NULLIF(TRIM(c.nome), ''), TRIM(c.razao))        AS nome,
    TRIM(c.razao)                                            AS razao,
    c.pesso                                                  AS pessoa,
    c.consfinal,
    c.cgcpf,
    c.suf_cgcpf,
    c.inscr                                                  AS inscricao_estadual,
    c.endereco,
    COALESCE(c.num_endereco, '')                             AS num_endereco,
    c.bairr                                                  AS bairro,
    c.id_municipio,
    c.cep,
    c.ddd,
    c.telef                                                  AS telefone,
    c.e_mail                                                 AS email,
    c.data                                                   AS dt_cadastro,
    c.obs,
    c.cod_formapag,
    (
        SELECT fp.id_formapag
        FROM gestao.formapag fp
        LEFT JOIN gestao.empresa e ON e.id_empresa = COALESCE(c.id_empresa, 1)
        WHERE fp.id_empresa = COALESCE(e.id_matriz, COALESCE(c.id_empresa, 1))
          AND fp.codigo = c.cod_formapag
        LIMIT 1
    )                                                        AS id_formapag,
    c.indicador_ie,
    c.cod_pauta,
    c.st_especifica,
    COALESCE(c.limcred, 0)                                   AS limite_credito,
    c.cod_vendedor,
    c.dt_atual
FROM sig.corrent c;

-- ---------------------------------------------------------------------------
-- 2. PEDIDOS ERP
--    Fonte: sig.pedidos
--    Situa SIG → SAR: 5=Cancelado(SIG) vs 3=Cancelado(SAR). O backend
--    normaliza em runtime (sigToSar / sarToSig em orders.service.ts).
-- ---------------------------------------------------------------------------
CREATE OR REPLACE VIEW sar.vw_pedidos_erp AS
SELECT
    p.id_empresa,
    p.id_pedido,
    p.num_ped_sar,
    p.numero,
    p.tipo,
    p.situa,
    CASE p.situa
        WHEN 1 THEN 'Pendente'
        WHEN 2 THEN 'Liberado'
        WHEN 4 THEN 'Faturado'
        WHEN 5 THEN 'Cancelado'
        ELSE        'Enviado'
    END                                                      AS status_descr,
    p.data                                                   AS dt_pedido,
    p.data_emissao                                           AS dt_emissao,
    p.clien                                                  AS id_cliente,
    p.cod_vendedor,
    p.cod_formapag,
    fp.id_formapag,
    fp.descr                                                 AS forma_pagamento,
    pau.id_pauta,
    COALESCE(p.obs, '')                                      AS obs,
    p.totpr                                                  AS total_produtos,
    COALESCE(p.ipi, 0)                                       AS total_ipi,
    0                                                        AS total_icmsst,
    COALESCE(p.total, 0)                                     AS total,
    COALESCE(p.descp, 0)                                     AS desconto_perc,
    COALESCE(p.descv, 0)                                     AS desconto_valor,
    COALESCE(p.tx_acrescimo, 0)                              AS acrescimo,
    COALESCE(p.com_fat, 0)                                   AS comissao,
    COALESCE(p.ped_flex::integer, 0)                         AS ped_flex,
    p.cod_vend2                                              AS cod_supervisor,
    p.tx_com_vend2                                           AS taxa_com_super
FROM sig.pedidos p
LEFT JOIN gestao.formapag fp
       ON fp.codigo    = p.cod_formapag
      AND fp.id_empresa = CASE WHEN p.id_empresa > 9000
                               THEN p.id_empresa - 9000
                               ELSE p.id_empresa END
LEFT JOIN gestao.pauta pau
       ON pau.codigo    = p.cod_pauta
      AND pau.id_empresa = CASE WHEN p.id_empresa > 9000
                                THEN p.id_empresa - 9000
                                ELSE p.id_empresa END;
