// Manifesto do produto PeopleX. O shell da plataforma (platform/shell.jsx) lê
// window.XCOPE_PRODUCT: navegação, dados, ações do ⌘K, sugestões do Copiloto e identidade.

// nav registry: [group?, [id,label,iconKey,path]...]
// single source of truth for "today" across every screen in the kit
const TODAY=new Date(2026,6,24);            // sexta, 24 de julho de 2026
const NOW=12*60+42;                         // 12:42, minutos desde a meia-noite
const SHIFT_IN=8*60, SHIFT_TARGET=480, SHIFT_BREAK=45;   // entrada, jornada, pausa
const WD_SHORT=["S","T","Q","Q","S","S","D"];   // seg..dom
const WD_LONG=["Segunda","Terça","Quarta","Quinta","Sexta","Sábado","Domingo"];
const MONTHS_LONG=["janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro"];
const wdIndex=d=>((d.getDay()+6)%7);          // 0 = segunda
const addDays=(d,n)=>new Date(d.getFullYear(),d.getMonth(),d.getDate()+n);
const weekStart=d=>addDays(d,-wdIndex(d));
const fmtLong=d=>WD_LONG[wdIndex(d)]+", "+d.getDate()+" de "+MONTHS_LONG[d.getMonth()];
const hm=m=>String(Math.floor(m/60)).padStart(2,"0")+":"+String(m%60).padStart(2,"0");
const dur=m=>Math.floor(m/60)+"h"+(m%60?" "+String(m%60).padStart(2,"0"):"");
window.WFA_TODAY={TODAY,NOW,SHIFT_IN,SHIFT_TARGET,SHIFT_BREAK,WD_SHORT,WD_LONG,MONTHS_LONG,wdIndex,addDays,weekStart,fmtLong,hm,dur};

const NAV=[
  ["Geral","flat",[["home","Início","home"],["inbox","Inbox","mail"],["chat","Chat","chat"],["news","Comunicações","mic"],["notifications","Pendentes","bell"]]],
  ["Plataforma","tree",[
    ["pessoal","Pessoal","badge",[["profile","Perfil"],["tasks","Tarefas"],["my-tickets","Os meus tickets"],["surveys","Inquéritos"],["time-off","As minhas ausências"]]],
    ["tempo","Tempo","clock",[["calendar","Calendário"],["clock-in","Registo de ponto"],["schedules","Horários"],["time-reports","Relatórios de tempo"]]],
    ["talento","Talento","users",[["recruiting","Recrutamento"],["onboarding","Admissões e saídas"],["reviews","Avaliações"],["training","Formação"]]],
    ["financeiro","Despesas","doc",[["expenses","Despesas"],["reports","Relatórios"]]],
    ["admin","Administração","shield",[["admin-employees","Pessoas"],["admin-time-off","Gestão de ausências"],["admin-payroll","Salários"],["admin-compliance","Conformidade"],["admin-assets","Equipamentos"],["admin-org","Organograma"],["admin-tickets","Tickets"],["admin-users","Utilizadores"],["admin-roles","Funções"],["admin-teams","Equipas"],["admin-tenants","Empresas do grupo"],["admin-company-documents","Docs da empresa"]]],
  ]],
];
const FIT=["calendar","inbox","chat","tasks"];

const PEOPLE=["Mira Mango","Zain Franci","Carla Dias","Tomás Jervell","Ana Reis","Rui Pinto","Sofia Melo","João Alves"];

// mural de comunicações: dados partilhados entre o widget do Início e o ecrã Comunicações (news.jsx)
window.WFA_NEWS=[
  {id:1,pinned:true,cat:"Comunicado",t:"Nova política de teletrabalho",by:"Hugo Montenegro",when:"há 2 dias",resumo:"Em vigor a 1 de agosto. Até 3 dias remotos por semana.",likes:14,
    body:["A partir de 1 de agosto, cada equipa pode trabalhar remotamente até 3 dias por semana, combinados com o gestor.","Os dias de presença comum de cada equipa passam a estar marcados no Calendário. O registo de ponto não muda.","Dúvidas: fala com a equipa de Pessoas ou responde a este comunicado."]},
  {id:2,cat:"Evento",t:"Festa de verão · 31 jul",by:"Carla Dias",when:"há 3 dias",resumo:"Jardins do Palácio de Cristal, 18h. Inscrições até sexta.",likes:22,rsvp:38,
    body:["A festa de verão é já a 31 de julho, a partir das 18h, nos Jardins do Palácio de Cristal, no Porto.","Jantar, música e o tradicional quiz entre equipas. Família é bem-vinda.","Inscreve-te até sexta para contarmos contigo no jantar."]},
  {id:3,cat:"Comunicado",t:"Resultados do 1.º semestre",by:"Hugo Montenegro",when:"há 1 semana",resumo:"Crescemos 18% face a 2025. Obrigado a todos.",likes:31,
    body:["Fechámos o primeiro semestre com um crescimento de 18% face ao período homólogo e 9 clientes novos.","As três unidades contribuíram: a Consultoria liderou em receita, o Produto duplicou a base de utilizadores e a expansão internacional arrancou no Dubai.","No town hall de agosto partilhamos os números completos e os objetivos para o segundo semestre."]},
  {id:4,cat:"Política",t:"Atualização da política de despesas",by:"Tomás Machado",when:"há 2 semanas",resumo:"Novos limites de alojamento e submissão até dia 5.",likes:6,
    body:["O limite de alojamento em deslocações nacionais passa para 95 € por noite e as despesas do mês devem ser submetidas até ao dia 5 do mês seguinte.","A política completa está nos Docs da empresa e no separador Despesas."]},
  {id:5,cat:"Evento",t:"Sessão de boas-vindas · novas caras",by:"Carla Dias",when:"há 3 semanas",resumo:"Quinta, 11h, sala grande. Vem conhecer a Ana e o João.",likes:12,rsvp:21,
    body:["Na quinta às 11h fazemos a sessão de boas-vindas à Ana Reis (Dados) e ao João Alves (Engenharia).","Café e pastéis de nata garantidos. Aparece na sala grande ou liga-te pela videochamada."]},
];

const GROUP={name:"Xcope",companies:[
  {id:"norte",name:"Xcope AI",short:"XC",city:"Porto",people:84,role:"CEO",color:"#f27101"},
  {id:"sul",name:"Xcope Produto",short:"XP",city:"Lisboa",people:126,role:"Gestor de equipa",color:"#3b7ea1"},
  {id:"tech",name:"Xcope Internacional",short:"XI",city:"Braga",people:38,role:"Colaborador",color:"#6b8f3a"},
  {id:"servicos",name:"Xcope Labs",short:"XL",city:"Aveiro",people:52,role:"Sem acesso",color:"#8a6bab",noAccess:true}]};

const CP_SUG={
  home:["O que precisa de mim hoje?","Resume a minha semana"],
  inbox:["Resume os emails não lidos","Escreve uma resposta ao contrato"],
  chat:["Resume o canal #produto","Quem falou de férias esta semana?"],
  notifications:["O que é mais urgente?","Aprova tudo o que é rotina"],
  tasks:["Que tarefas estão atrasadas?","Cria uma tarefa a partir do último email"],
  calendar:["Onde tenho espaço para 1 hora?","Marca 1:1 com o Rui"],
  "time-off":["Quantos dias de férias tenho?","Pede férias de 4 a 15 de agosto"],
  "admin-time-off":["Quem está fora na próxima semana?","Há conflitos de cobertura?"],
  recruiting:["Quem está parado há mais de 5 dias?","Resume os candidatos de QA"],
  onboarding:["O que falta para o Tiago entrar?","Notifica quem tem tarefas em atraso"],
  reviews:["Quem ainda não fez a autoavaliação?","Resume o ciclo H1"],
  training:["Que certificações expiram este mês?","Quem falta na formação obrigatória?"],
  expenses:["Que despesas estão fora da política?","Total a reembolsar este mês"],
  reports:["Explica a queda da rotatividade","Compara custo por departamento"],
  "admin-employees":["Quantas pessoas por departamento?","Quem entrou este ano?"],
};
const CP_DEF=["O que precisa de mim hoje?","Resume esta página","O que mudou desde ontem?"];

const SPOT_ACTIONS=[["Registar entrada/saída","clock-in","clock"],["Pedir férias","time-off","away"],["Nova mensagem","inbox","mail"],["Abrir calendário","calendar","cal"],["Criar ticket","my-tickets","ticket"],["Ver folha de ponto","clock-in","task"],["Ver comunicações","news","mic"],["Processar salários","admin-payroll","doc"],["Mapa anual de férias","admin-time-off","cal"],["Conformidade legal","admin-compliance","shield"],["Equipamentos","admin-assets","mon"]];

const USER={name:"Hugo Montenegro",email:"hugo@xcope.ai",role:"CEO",avatar:"assets/hugo-square.jpg"};
const PRODUCTS=[
  {id:"peoplex",label:"PeopleX",desc:"Gestão de pessoas",active:true},
  {id:"intelligence",label:"XCOPE Intelligence",desc:"Inteligência comercial",url:"https://intelligence.xcope.ai"},
];
const BRAND={logo:"assets/logos/xcope-icon.jpg"};
const S={};
window.XCOPE_PRODUCT={id:"peoplex",NAV,FIT,S,PEOPLE,GROUP,SPOT_ACTIONS,COPILOT:{sug:CP_SUG,def:CP_DEF},USER,PRODUCTS,BRAND,
  labelExtras:{settings:"Definições","profile-documents":"Documentos"}};
