-- ---------------------------------------------------------------------------
-- A vigencia do horario semanal: `usuarios_horarios` (F4.1 do Profissional
-- Parceiro, 02/10/2026).
--
--   docker compose exec -T mysql mysql -uroot -proot franquiabv_dev \
--     < scripts/migracao-usuarios-horarios.sql
--
-- O HORARIO MORA EM `usuarios` E E SOBRESCRITO: as 28 colunas de hora, o
-- `tempo_atendimento`, as ferias, o `status` e o `visivel_agenda`. A ocupacao
-- da agenda de um mes passado precisa do horario DAQUELE mes, e ate hoje ele
-- se perdia na edicao seguinte. Esta tabela guarda o retrato inteiro a cada
-- mudanca, com quem mudou e por qual porta (`UsuarioService`, pelas quatro
-- portas; `VigenciaDoHorario` grava). Ver `docs/f3-relatorios.md`, secao 5,
-- "A F4".
--
-- IDEMPOTENTE: `CREATE TABLE IF NOT EXISTS`. O DDL e o mesmo do `mysql.sql`,
-- e os dois tem de continuar iguais: `UsuarioHorarioVigenciaTest`
-- (`testAMigracaoEOMysqlSqlTemOMesmoDdl`) le os dois arquivos e compara.
--
-- ---------------------------------------------------------------------------
-- ESTA MIGRACAO PRECISA ESTAR EM PRODUCAO ANTES DO CORTE -- o passo 0 de
-- `docs/procedimento-de-corte.md`, ao lado do D54 e do D86.
--
-- O passo 1 do corte refaz o `mysql.sql` a partir da estrutura de producao, e e
-- dele que `scripts/gerar-ddl-postgres.php` parte. Sem esta tabela em
-- producao, ela some do `schema.sql`, e salvar usuario ou horario da 500 no
-- primeiro dia. Para o codigo antigo de producao a tabela vazia e inofensiva:
-- ninguem a le nem a escreve.
--
-- DEPOIS DELA, A SEMENTE: `scripts/semente-usuarios-horarios.mysql.sql` (ou,
-- no PostgreSQL, `postgres/semente-usuarios-horarios.sql`), e o conferidor
-- `scripts/conferir-vigencia-do-horario.php --plataforma=...`, que tem de sair
-- com 0 -- no corte, depois do passo 7 (o 7b do procedimento).
--
-- SEM `ON DELETE CASCADE`, de proposito: o historico nao some calado junto
-- com o usuario. SEM `UNIQUE`: duas linhas no mesmo instante sao possiveis, e
-- o desempate e o `id`.
-- ---------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `usuarios_horarios` (
  `id` int NOT NULL AUTO_INCREMENT,
  `usuario` int NOT NULL,
  `vigente_desde` datetime NOT NULL,
  `porta` varchar(10) NOT NULL COMMENT 'semente, inclusao, cadastro, estado ou agenda',
  `gravado_por` int DEFAULT NULL COMMENT 'Quem entrou na sessao (SessaoAcl::loginDaSessao); nulo na semente',
  `em_nome_de` int DEFAULT NULL COMMENT 'A pessoa da sessao, so quando difere de gravado_por (personificacao)',
  `status` int NOT NULL,
  `visivel_agenda` varchar(10) NOT NULL,
  `tempo_atendimento` double DEFAULT NULL,
  `segunda_abertura` time DEFAULT NULL,
  `segunda_fechamento` time DEFAULT NULL,
  `segunda_almoco_inicio` time DEFAULT NULL,
  `segunda_almoco_fim` time DEFAULT NULL,
  `terca_abertura` time DEFAULT NULL,
  `terca_fechamento` time DEFAULT NULL,
  `terca_almoco_inicio` time DEFAULT NULL,
  `terca_almoco_fim` time DEFAULT NULL,
  `quarta_abertura` time DEFAULT NULL,
  `quarta_fechamento` time DEFAULT NULL,
  `quarta_almoco_inicio` time DEFAULT NULL,
  `quarta_almoco_fim` time DEFAULT NULL,
  `quinta_abertura` time DEFAULT NULL,
  `quinta_fechamento` time DEFAULT NULL,
  `quinta_almoco_inicio` time DEFAULT NULL,
  `quinta_almoco_fim` time DEFAULT NULL,
  `sexta_abertura` time DEFAULT NULL,
  `sexta_fechamento` time DEFAULT NULL,
  `sexta_almoco_inicio` time DEFAULT NULL,
  `sexta_almoco_fim` time DEFAULT NULL,
  `sabado_abertura` time DEFAULT NULL,
  `sabado_fechamento` time DEFAULT NULL,
  `sabado_almoco_inicio` time DEFAULT NULL,
  `sabado_almoco_fim` time DEFAULT NULL,
  `domingo_abertura` time DEFAULT NULL,
  `domingo_fechamento` time DEFAULT NULL,
  `domingo_almoco_inicio` time DEFAULT NULL,
  `domingo_almoco_fim` time DEFAULT NULL,
  `ferias_inicio` date DEFAULT NULL,
  `ferias_fim` date DEFAULT NULL,
  `data_criacao` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `FK_USUARIOS_HORARIOS_usuario` (`usuario`,`vigente_desde`),
  CONSTRAINT `FK_USUARIOS_HORARIOS_usuario` FOREIGN KEY (`usuario`) REFERENCES `usuarios` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
