// Painel Admin — dados mock + sistema de permissões granulares
// Modelo: 1 Admin Master + Funcionários agrupados em Cargos customizáveis

// ── PERMISSÕES GRANULARES ──
const PERMISSOES = [
  { id: "socios:list",          label: "Ver lista de sócios",            grupo: "Pessoas" },
  { id: "socios:edit",          label: "Editar dados de sócio",          grupo: "Pessoas" },
  { id: "cadastros:approve",    label: "Aprovar/recusar cadastros",      grupo: "Pessoas" },
  { id: "graduacoes:create",    label: "Promover graduações",            grupo: "Pessoas" },
  { id: "aulas:manage",         label: "Criar/editar aulas",             grupo: "Operação" },
  { id: "presencas:create",     label: "Marcar presenças",               grupo: "Operação" },
  { id: "eventos:create",       label: "Criar eventos",                  grupo: "Operação" },
  { id: "mensalidades:read",    label: "Ver mensalidades",               grupo: "Financeiro" },
  { id: "mensalidades:pay",     label: "Marcar mensalidade como paga",   grupo: "Financeiro" },
  { id: "mensalidades:lote",    label: "Lançar mensalidades em lote",    grupo: "Financeiro" },
  { id: "avisos:create",        label: "Enviar avisos",                  grupo: "Comunicação" },
  { id: "materiais:create",     label: "Subir materiais",                grupo: "Comunicação" },
  { id: "dashboard:read",       label: "Ver dashboard/métricas",         grupo: "Geral" },
  { id: "funcionarios:manage",  label: "Gerenciar funcionários",         grupo: "Administração" },
];

const PERMISSOES_GRUPOS = ["Pessoas", "Operação", "Financeiro", "Comunicação", "Geral", "Administração"];

// ── CARGOS (customizáveis pelo admin master) ──
const CARGOS_INICIAIS = [
  {
    id: "cargo-master",
    nome: "Admin Master",
    cor: "#1d1d1f",
    desc: "Acesso total ao sistema",
    permissoes: ["*"], // wildcard = tudo
    sistema: true, // não pode ser editado/excluído
  },
  {
    id: "cargo-recep",
    nome: "Recepção",
    cor: "#0071e3",
    desc: "Atendimento e cadastros básicos",
    permissoes: ["socios:list", "cadastros:approve", "mensalidades:read", "dashboard:read"],
  },
  {
    id: "cargo-sensei-jr",
    nome: "Sensei Junior",
    cor: "#c63b3b",
    desc: "Aulas, presenças e graduações",
    permissoes: ["socios:list", "aulas:manage", "presencas:create", "graduacoes:create", "materiais:create", "dashboard:read"],
  },
  {
    id: "cargo-financeiro",
    nome: "Financeiro",
    cor: "#2da06a",
    desc: "Mensalidades e cobranças",
    permissoes: ["socios:list", "mensalidades:read", "mensalidades:pay", "mensalidades:lote", "dashboard:read"],
  },
  {
    id: "cargo-eventos",
    nome: "Coord. Eventos",
    cor: "#7a3da1",
    desc: "Organização de eventos e comunicação",
    permissoes: ["socios:list", "eventos:create", "avisos:create", "materiais:create", "dashboard:read"],
  },
];

// ── FUNCIONÁRIOS (Admin Master + 5 exemplos) ──
const ADMINS = [
  {
    id: "adm-master", usuario: "admin", senha: "Karate2025!",
    nome: "Mestre Robson", email: "robson@ikigai.com.br",
    cargoId: "cargo-master", iniciais: "MR", cor: "#1d1d1f",
    ativo: true, criadoEm: "01/01/2025", ultimoAcesso: "agora",
  },
  {
    id: "adm-marina", usuario: "marina", senha: "Karate2025!",
    nome: "Marina Costa", email: "marina@ikigai.com.br",
    cargoId: "cargo-recep", iniciais: "MC", cor: "#0071e3",
    ativo: true, criadoEm: "12/02/2025", ultimoAcesso: "há 2 horas",
  },
  {
    id: "adm-claudia", usuario: "claudia", senha: "Karate2025!",
    nome: "Cláudia Tanaka", email: "claudia@ikigai.com.br",
    cargoId: "cargo-sensei-jr", iniciais: "CT", cor: "#c63b3b",
    ativo: true, criadoEm: "20/02/2025", ultimoAcesso: "ontem",
  },
  {
    id: "adm-paulo", usuario: "paulo", senha: "Karate2025!",
    nome: "Paulo Mendes", email: "paulo@ikigai.com.br",
    cargoId: "cargo-financeiro", iniciais: "PM", cor: "#2da06a",
    ativo: true, criadoEm: "05/03/2025", ultimoAcesso: "há 30 min",
  },
  {
    id: "adm-juliana", usuario: "juliana", senha: "Karate2025!",
    nome: "Juliana Rocha", email: "juliana@ikigai.com.br",
    cargoId: "cargo-eventos", iniciais: "JR", cor: "#7a3da1",
    ativo: true, criadoEm: "18/03/2025", ultimoAcesso: "há 5 dias",
  },
  {
    id: "adm-bruno", usuario: "bruno", senha: "Karate2025!",
    nome: "Bruno Santos", email: "bruno@ikigai.com.br",
    cargoId: "cargo-recep", iniciais: "BS", cor: "#0071e3",
    ativo: false, criadoEm: "10/01/2025", ultimoAcesso: "há 2 meses",
  },
];

// ── Helpers ──
function adminPode(adminOrCargo, acao) {
  // aceita: cargo direto, admin (usa cargoId), ou role legacy
  let perms = [];
  if (typeof adminOrCargo === "string") {
    // legacy support — se receber role string
    const c = (window.CARGOS_STATE || CARGOS_INICIAIS).find((c) => c.id === adminOrCargo || c.legacyRole === adminOrCargo);
    perms = c?.permissoes || [];
  } else if (adminOrCargo?.permissoes) {
    perms = adminOrCargo.permissoes;
  } else if (adminOrCargo?.cargoId) {
    const c = (window.CARGOS_STATE || CARGOS_INICIAIS).find((c) => c.id === adminOrCargo.cargoId);
    perms = c?.permissoes || [];
  }
  if (perms.includes("*")) return true;
  if (perms.includes(acao)) return true;
  const [recurso] = acao.split(":");
  return perms.includes(`${recurso}:*`);
}

function cargoDe(admin) {
  return (window.CARGOS_STATE || CARGOS_INICIAIS).find((c) => c.id === admin.cargoId) || CARGOS_INICIAIS[0];
}

// retrocompatibilidade — código antigo usava ROLE_LABELS
const ROLE_LABELS = {};
CARGOS_INICIAIS.forEach((c) => {
  ROLE_LABELS[c.id] = { nome: c.nome, cor: c.cor, desc: c.desc };
});

// ── Métricas e listas (inalterados) ──
const ADMIN_METRICAS = {
  sociosAtivos: 184, sociosPendentes: 7, mensalidadesAtrasadas: 12,
  receitaMes: 38420, receitaPrevista: 40480,
  eventosFuturos: 4, totalAulas: 28, frequenciaMedia: 78,
  porFaixa: [
    { faixa: "Branca", cor: "#f5f5f7", borda: "#d2d2d7", n: 42 },
    { faixa: "Amarela", cor: "#e6a800", borda: "#c79100", n: 31 },
    { faixa: "Laranja", cor: "#e0762a", borda: "#b85f1f", n: 24 },
    { faixa: "Vermelha", cor: "#c63b3b", borda: "#9e2c2c", n: 22 },
    { faixa: "Roxa", cor: "#7a3da1", borda: "#5e2f7d", n: 18 },
    { faixa: "Verde", cor: "#2da06a", borda: "#1f7a4d", n: 15 },
    { faixa: "Marrom", cor: "#5b3a26", borda: "#3f291a", n: 14 },
    { faixa: "Preta", cor: "#1d1d1f", borda: "#000", n: 18 },
  ],
};
const ADMIN_CADASTROS = [
  { id: "p1", nome: "Lucas Pereira", email: "lucas@example.com", telefone: "(11) 98123-1234", recebidoEm: "há 2 dias", origem: "site" },
  { id: "p2", nome: "Beatriz Almeida", email: "bia@example.com", telefone: "(11) 99987-7890", recebidoEm: "há 1 dia", origem: "indicação" },
  { id: "p3", nome: "Marcos Tanaka", email: "marcos.t@example.com", telefone: "(11) 97654-3210", recebidoEm: "há 4 horas", origem: "site" },
  { id: "p4", nome: "Helena Silva", email: "helena@example.com", telefone: "(11) 96543-2109", recebidoEm: "há 3 horas", origem: "indicação" },
];
const ADMIN_SOCIOS = [
  { id: "s1", codigo: "0054", nome: "Rodrigo Souza", email: "rodrigo@example.com", faixa: "Preta 1º Dan", status: "ativo", mensAtraso: 0 },
  { id: "s2", codigo: "0055", nome: "Camila Ferreira", email: "camila@example.com", faixa: "Roxa", status: "ativo", mensAtraso: 0 },
  { id: "s3", codigo: "0058", nome: "Pedro Henrique", email: "pedro.h@example.com", faixa: "Amarela", status: "ativo", mensAtraso: 1 },
  { id: "s4", codigo: "0061", nome: "Juliana Mendes", email: "juliana@example.com", faixa: "Vermelha", status: "ativo", mensAtraso: 0 },
  { id: "s5", codigo: "0067", nome: "Carlos Oliveira", email: "carlos@example.com", faixa: "Marrom", status: "suspenso", mensAtraso: 3 },
  { id: "s6", codigo: "0072", nome: "Fernanda Lima", email: "fernanda@example.com", faixa: "Branca", status: "ativo", mensAtraso: 0 },
  { id: "s7", codigo: "0089", nome: "Ricardo Souza", email: "ricardo@example.com", faixa: "Verde", status: "ativo", mensAtraso: 2 },
  { id: "s8", codigo: "0112", nome: "Ana Lúcia Mendes", email: "ana@example.com", faixa: "Roxa", status: "ativo", mensAtraso: 0 },
  { id: "s9", codigo: "0203", nome: "Hiroshi Tanaka", email: "hiroshi@example.com", faixa: "Amarela", status: "ativo", mensAtraso: 0 },
];
const ADMIN_INADIMPLENTES = [
  { id: "i1", nome: "Pedro Henrique", codigo: "0058", mes: "abr 2026", valor: 220, dias: 12 },
  { id: "i2", nome: "Carlos Oliveira", codigo: "0067", mes: "fev 2026", valor: 220, dias: 72 },
  { id: "i3", nome: "Carlos Oliveira", codigo: "0067", mes: "mar 2026", valor: 220, dias: 41 },
  { id: "i4", nome: "Ricardo Souza", codigo: "0089", mes: "mar 2026", valor: 220, dias: 41 },
];
const ADMIN_AULAS = [
  { id: "a1", titulo: "Karate Shotokan", data: "Hoje 19:30", instrutor: "Mestre Robson", tatame: "Tatame 1", inscritos: 11, capacidade: 12 },
  { id: "a2", titulo: "Kihon avançado", data: "Amanhã 19:30", instrutor: "Cláudia Tanaka", tatame: "Tatame 1", inscritos: 8, capacidade: 12 },
  { id: "a3", titulo: "Kids Karate", data: "Qua 17:00", instrutor: "Sensei Roberto", tatame: "Tatame 2", inscritos: 12, capacidade: 12 },
  { id: "a4", titulo: "Kumite", data: "Qui 20:00", instrutor: "Mestre Robson", tatame: "Tatame 1", inscritos: 6, capacidade: 12 },
];
const ADMIN_EVENTOS = [
  { id: "e1", titulo: "Exame de Faixa", tipo: "exame", data: "13 set 2026", local: "Dojo Central", inscritos: 24 },
  { id: "e2", titulo: "Estágio com Mestre Robson", tipo: "estagio", data: "21 jun 2026", local: "Centro de Convenções", inscritos: 47 },
  { id: "e3", titulo: "Torneio Inter-Dojos", tipo: "torneio", data: "16 mai 2026", local: "Ginásio Mauá", inscritos: 31 },
];
const ADMIN_RECEITA_SEMANAL = [
  { dia: "Seg", v: 1200 }, { dia: "Ter", v: 1800 }, { dia: "Qua", v: 2400 },
  { dia: "Qui", v: 1900 }, { dia: "Sex", v: 3100 }, { dia: "Sáb", v: 2200 }, { dia: "Dom", v: 800 },
];

Object.assign(window, {
  PERMISSOES, PERMISSOES_GRUPOS, CARGOS_INICIAIS,
  ADMINS, ROLE_LABELS, adminPode, cargoDe,
  ADMIN_METRICAS, ADMIN_CADASTROS, ADMIN_SOCIOS, ADMIN_INADIMPLENTES,
  ADMIN_AULAS, ADMIN_EVENTOS, ADMIN_RECEITA_SEMANAL,
});
