-- ============================================================
-- Migration 016: Arvore de decisao por especialidade para RH
-- Tabelas:
--   area_routing_keywords
-- ============================================================

CREATE TABLE IF NOT EXISTS area_routing_keywords (
  id SERIAL PRIMARY KEY,
  area_id INTEGER NOT NULL REFERENCES areas(id) ON DELETE CASCADE,
  keyword VARCHAR(160) NOT NULL,
  active BOOLEAN NOT NULL DEFAULT TRUE,
  created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
  CONSTRAINT uq_area_routing_keyword UNIQUE (area_id, keyword)
);

CREATE INDEX IF NOT EXISTS idx_area_routing_keywords_area
  ON area_routing_keywords (area_id, active);

CREATE INDEX IF NOT EXISTS idx_area_routing_keywords_keyword
  ON area_routing_keywords (keyword);

INSERT INTO areas (nome, descricao) VALUES
  ('Benefícios', 'Duvidas de RH sobre beneficios, convenios, vale transporte e vale refeicao'),
  ('Ponto', 'Ajustes de ponto, banco de horas, atrasos e jornada'),
  ('Holerite', 'Holerite, folha de pagamento, descontos e demonstrativos'),
  ('Férias', 'Ferias, abono, programacao e saldo de descanso'),
  ('Recrutamento', 'Vagas internas, candidatura, entrevista e processo seletivo')
ON CONFLICT (nome) DO UPDATE SET
  descricao = EXCLUDED.descricao,
  ativo = TRUE,
  updated_at = NOW();

INSERT INTO area_routing_keywords (area_id, keyword)
SELECT a.id, keyword
FROM areas a
JOIN (
  VALUES
    ('Benefícios', 'beneficio'),
    ('Benefícios', 'beneficios'),
    ('Benefícios', 'vale refeicao'),
    ('Benefícios', 'vale alimentacao'),
    ('Benefícios', 'vale transporte'),
    ('Benefícios', 'convenio'),
    ('Benefícios', 'plano de saude'),
    ('Benefícios', 'odonto'),
    ('Ponto', 'ponto'),
    ('Ponto', 'espelho de ponto'),
    ('Ponto', 'banco de horas'),
    ('Ponto', 'atraso'),
    ('Ponto', 'jornada'),
    ('Ponto', 'batida'),
    ('Ponto', 'marcacao'),
    ('Holerite', 'holerite'),
    ('Holerite', 'folha'),
    ('Holerite', 'pagamento'),
    ('Holerite', 'salario'),
    ('Holerite', 'desconto'),
    ('Holerite', 'demonstrativo'),
    ('Férias', 'ferias'),
    ('Férias', 'abono'),
    ('Férias', 'descanso'),
    ('Férias', 'saldo de ferias'),
    ('Férias', 'programar ferias'),
    ('Recrutamento', 'vaga'),
    ('Recrutamento', 'vagas'),
    ('Recrutamento', 'processo seletivo'),
    ('Recrutamento', 'entrevista'),
    ('Recrutamento', 'curriculo'),
    ('Recrutamento', 'candidatura')
) AS seed(area_nome, keyword) ON seed.area_nome = a.nome
ON CONFLICT (area_id, keyword) DO UPDATE SET
  active = TRUE,
  updated_at = CURRENT_TIMESTAMP;

INSERT INTO whatsapp_templates (name, content, area_id, status, requested_by_role, admin_approved_at, meta_submitted_at, meta_approved_at, updated_at)
SELECT template.name, template.content, a.id, 'approved', 'admin', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP
FROM areas a
JOIN (
  VALUES
    ('rh_abertura_beneficios', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Recebemos sua solicitacao sobre beneficios e vamos te apoiar por aqui.'),
    ('rh_abertura_ponto', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Vamos te ajudar com sua solicitacao sobre ponto, jornada ou banco de horas.'),
    ('rh_abertura_holerite', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Vamos te ajudar com holerite, folha ou demonstrativo de pagamento.'),
    ('rh_abertura_ferias', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Vamos te apoiar com sua solicitacao sobre ferias.'),
    ('rh_abertura_recrutamento', 'Ola, {nome}. Aqui e o Atendimento Sothis RH. Vamos te orientar sobre vagas, candidatura ou processo seletivo.')
) AS template(name, content) ON template.name LIKE
  CASE a.nome
    WHEN 'Benefícios' THEN '%beneficios'
    WHEN 'Ponto' THEN '%ponto'
    WHEN 'Holerite' THEN '%holerite'
    WHEN 'Férias' THEN '%ferias'
    WHEN 'Recrutamento' THEN '%recrutamento'
  END
ON CONFLICT (name) DO UPDATE SET
  content = EXCLUDED.content,
  area_id = EXCLUDED.area_id,
  status = 'approved',
  meta_approved_at = CURRENT_TIMESTAMP,
  updated_at = CURRENT_TIMESTAMP;
