// Cadastros de Configurações. Conteúdo reaproveitado de ui_kits/pastagem/ConfiguracoesGlobais.jsx (Rebanho e Pastagem),
// ui_kits/boletins/Parametros.jsx (Boletins) e ui_kits/maquinario/data.jsx (Maquinário).
// Tipos de campo: text (padrão), num (append), select (opts), multi (opts). sync = campo vindo do ERP (somente leitura).
;(() => {
  const FAZ = ['Fazenda Guanabara', 'Fazenda Mateira', 'Fazenda Paranapanema']
  const SN = ['Sim', 'Não']
  const AVISO_UA = 'Alterar afeta a conversão em UA e as estimativas de capacidade em todo o sistema.'
  const MATS = ['OLEO LUBRIFICANTE 15W40 (TRATORES & GERADORES)', 'FILTRO DE COMBUSTIVEL (TRATOR) 3', 'FILTRO DE OLEO (TRATOR) 3', 'FILTRO DE OLEO (CAMIONETE)', 'FILTRO DE OLEO (QUADRICICLO)', 'FILTRO DE AR (GERADORES)']
  const MODELOS = ['John Deere 5055E', 'Polaris Sportsman 570', 'Polaris Ranger', 'Toyota Hilux', 'Fiat Toro', 'Stemac ST180', 'Buffalo BFDE 4']
  const TIPOS_MAQ = ['Quadriciclo e UTV', 'Trator', 'Veículo de Apoio', 'Transporte de Administração', 'Motocicleta', 'Gerador', 'Motor estacionário']
  const CC = ['Lavoura · Milho safrinha', 'Lavoura · Soja', 'Pecuária · Pastagens', 'Pecuária · Sanidade', 'Infraestrutura · Cercas', 'Administrativo · Escritório']
  const curta = (f) => f.replace('Fazenda ', '')
  const row = (keys) => (vals, ativo) => ({ ...Object.fromEntries(keys.map((k, i) => [k, vals[i]])), ativo: ativo !== false })

  const CADASTROS = {
    'Locais': { singular: 'local', dup: 'Já existe um local com esse nome nessa fazenda.',
      cols: [{ k: 'nome', label: 'Local', req: 1 }, { k: 'fazenda', label: 'Fazenda', type: 'select', opts: FAZ, req: 1, fmt: (r) => curta(r.fazenda) }, { k: 'tipo', label: 'Tipo de local', type: 'select', opts: ['Piquete', 'Talhão', 'Curral', 'Benfeitoria', 'Divisa'] }],
      rows: [['Piquete 12', FAZ[0], 'Piquete'], ['Divisa Norte', FAZ[0], 'Divisa'], ['Curral central', FAZ[0], 'Curral'], ['Talhão 1', FAZ[1], 'Talhão'], ['Talhão 3', FAZ[1], 'Talhão'], ['Armazém', FAZ[2], 'Benfeitoria', false]].map((v) => row(['nome', 'fazenda', 'tipo'])(v.slice(0, 3), v[3] !== false)) },

    'Raças': { singular: 'raça', dup: 'Já existe uma raça com esse nome.',
      cols: [{ k: 'nome', label: 'Raça', req: 1 }, { k: 'sigla', label: 'Sigla', req: 1, width: 120 }, { k: 'aptidao', label: 'Aptidão', type: 'select', opts: ['Corte', 'Leite', 'Dupla aptidão'], req: 1 }, { k: 'grupo', label: 'Grupo genético', type: 'select', opts: ['Zebuína', 'Taurina', 'Cruzamento'], req: 1 }],
      rows: [['Nelore', 'NE', 'Corte', 'Zebuína'], ['Angus', 'AN', 'Corte', 'Taurina'], ['Brahman', 'BR', 'Corte', 'Zebuína'], ['Senepol', 'SE', 'Corte', 'Taurina'], ['Nelore × Angus', 'NA', 'Corte', 'Cruzamento'], ['Tabapuã', 'TB', 'Corte', 'Zebuína'], ['Gir Leiteiro', 'GL', 'Leite', 'Zebuína', false]].map((v) => row(['nome', 'sigla', 'aptidao', 'grupo'])(v.slice(0, 4), v[4] !== false)) },

    'Grupos de idade': { singular: 'grupo de idade',
      cols: [{ k: 'nome', label: 'Grupo', req: 1 }, { k: 'faixa', label: 'Intervalo de idade', req: 1 }, { k: 'sexo', label: 'Sexo', type: 'select', opts: ['Fêmea', 'Macho', 'Ambos'], req: 1 }],
      rows: [['Bezerras Mamando', 'de 1 a 240 dias', 'Fêmea'], ['Bezerras Desmama 8 a 12m', 'de 241 a 365 dias', 'Fêmea'], ['Novilhas 13 a 18m', 'de 366 a 540 dias', 'Fêmea'], ['Novilhas 19 a 24m', 'de 541 a 720 dias', 'Fêmea'], ['Adulto', 'acima de 720 dias', 'Ambos']].map(row(['nome', 'faixa', 'sexo'])) },

    'Baixas de animais': { tabs: [
      { label: 'Causas de morte', singular: 'causa de morte', dup: 'Já existe uma causa de morte com esse nome.',
        cols: [{ k: 'nome', label: 'Causa', req: 1 }, { k: 'grupo', label: 'Grupo', type: 'select', opts: ['Doença', 'Acidente', 'Predação', 'Parto', 'Intoxicação', 'Indeterminada'], req: 1 }, { k: 'laudo', label: 'Exige laudo veterinário', type: 'select', opts: SN, req: 1 }],
        rows: [['Tristeza parasitária', 'Doença', 'Sim'], ['Clostridiose', 'Doença', 'Sim'], ['Raio', 'Acidente', 'Não'], ['Afogamento', 'Acidente', 'Não'], ['Picada de cobra', 'Acidente', 'Não'], ['Ataque de onça', 'Predação', 'Não'], ['Distocia', 'Parto', 'Não'], ['Intoxicação por planta', 'Intoxicação', 'Sim'], ['Causa desconhecida', 'Indeterminada', 'Não']].map(row(['nome', 'grupo', 'laudo'])) },
      { label: 'Outros', singular: 'motivo', dup: 'Já existe um motivo com esse nome.',
        cols: [{ k: 'nome', label: 'Motivo', req: 1 }, { k: 'natureza', label: 'Natureza', type: 'select', opts: ['Comercial', 'Manejo', 'Perda'], req: 1 }, { k: 'doc', label: 'Exige documento', type: 'select', opts: SN, req: 1 }],
        rows: [['Venda', 'Comercial', 'Sim'], ['Abate', 'Comercial', 'Sim'], ['Doação', 'Comercial', 'Sim'], ['Dispersão', 'Manejo', 'Não'], ['Descarte', 'Manejo', 'Não'], ['Roubo / Furto', 'Perda', 'Sim']].map(row(['nome', 'natureza', 'doc'])) },
    ] },

    'Reprodução': { tabs: [
      { label: 'Protocolos', singular: 'protocolo',
        cols: [{ k: 'nome', label: 'Protocolo', req: 1 }, { k: 'tipo', label: 'Tipo', type: 'select', opts: ['IATF', 'Monta natural', 'Repasse'], req: 1 }, { k: 'duracao', label: 'Duração', type: 'num', append: 'dias' }],
        rows: [['Estação de Monta 2025/26', 'Monta natural', '90'], ['IATF · Lote Novilhas', 'IATF', '11'], ['Repasse com touro', 'Repasse', '60'], ['Protocolo 9 dias', 'IATF', '9']].map(row(['nome', 'tipo', 'duracao'])) },
      { label: 'Peso ao nascimento', singular: 'faixa de peso',
        cols: [{ k: 'nome', label: 'Faixa', req: 1 }, { k: 'min', label: 'Peso mínimo', type: 'num', append: 'kg', req: 1 }, { k: 'max', label: 'Peso máximo', type: 'num', append: 'kg', req: 1 }],
        rows: [['Leve', '20', '29'], ['Médio', '30', '37'], ['Pesado', '38', '50']].map(row(['nome', 'min', 'max'])) },
    ] },

    'Produtos': { singular: 'produto',
      cols: [{ k: 'nome', label: 'Produto', req: 1 }, { k: 'tipo', label: 'Categoria', type: 'select', opts: ['Vacina', 'Vermífugo', 'Suplemento', 'Ectoparasiticida', 'Medicamento'], req: 1 }],
      rows: [['Vacina Aftosa', 'Vacina'], ['Vermífugo Ivermectina', 'Vermífugo'], ['Mineral Reprodução', 'Suplemento'], ['Vacina Brucelose', 'Vacina'], ['Mosquicida Pour-on', 'Ectoparasiticida']].map(row(['nome', 'tipo'])) },

    'Inseminadores': { singular: 'inseminador',
      cols: [{ k: 'nome', label: 'Nome', req: 1 }, { k: 'registro', label: 'Registro / CRMV' }],
      rows: [['Caíque Souza', 'CRMV-PR 12.345'], ['Marina Alves', 'CRMV-SP 67.890'], ['Felipe Tavares', 'Técnico · Cert. 0042']].map(row(['nome', 'registro'])) },

    'Parâmetros gerais': { form: true },

    'Tipos de capim': { singular: 'tipo de capim', aviso: AVISO_UA,
      cols: [{ k: 'nome', label: 'Tipo de capim', req: 1 }],
      rows: [['Brachiaria Marandu'], ['Mombaça'], ['Massai'], ['Tanzânia']].map(row(['nome'])) },

    'Categorias de lote': { singular: 'categoria de lote', aviso: AVISO_UA,
      cols: [{ k: 'nome', label: 'Categoria do lote', req: 1 }, { k: 'fator', label: 'Fator UA', type: 'num', append: 'UA', req: 1 }],
      rows: [['Desmama 8–12 meses', '0,56'], ['Novilhas 13–18 meses', '0,78'], ['Novilhas em Monta', '0,89'], ['Novilhas Cheias', '1,00'], ['Vaca Solteira', '1,10'], ['Vaca Solteira Entourada', '1,28'], ['Vaca Parida', '1,28'], ['Vaca Parida Entourada', '1,55'], ['Touro', '1,55'], ['Rufião', '1,00']].map(row(['nome', 'fator'])) },

    'Tipos de evento de pasto': { singular: 'tipo de evento', dup: 'Já existe um tipo de evento com esse nome.',
      cols: [{ k: 'nome', label: 'Tipo de evento', req: 1, full: 1 }, { k: 'categoria', label: 'Categoria', type: 'select', opts: ['Adubação', 'Defensivo', 'Manejo mecânico'], req: 1 }, { k: 'unidade', label: 'Unidade da dose', type: 'select', opts: ['kg/ha', 'L/ha', 'Não se aplica'], req: 1 }, { k: 'carencia', label: 'Carência de pastejo', type: 'num', append: 'dias' }],
      rows: [['Aplicação Adubo - Uréia', 'Adubação', 'kg/ha', '7'], ['Aplicação Adubo - Nitrato', 'Adubação', 'kg/ha', '7'], ['Aplicação Adubo - Formulado', 'Adubação', 'kg/ha', '5'], ['Aplicação Adubo - Orgânico', 'Adubação', 'kg/ha', '15'], ['Aplicação Inseticida', 'Defensivo', 'L/ha', '21'], ['Aplicação Herbicida', 'Defensivo', 'L/ha', '30'], ['Roçada', 'Manejo mecânico', 'Não se aplica', '0']].map(row(['nome', 'categoria', 'unidade', 'carencia'])) },

    'Serviços': { singular: 'serviço', dup: 'Já existe um serviço com esse nome.',
      cols: [{ k: 'nome', label: 'Serviço', req: 1, full: 1 }, { k: 'tipo', label: 'Tipo de serviço', type: 'select', opts: ['Mecanização', 'Serviços Gerais', 'Administrativo'], req: 1 }, { k: 'cc', label: 'Centro de custo', type: 'select', opts: CC, req: 1 }, { k: 'fazendas', label: 'Fazendas', type: 'multi', opts: FAZ, req: 1, full: 1, fmt: (r) => r.fazendas.map(curta).join(', ') }, { k: 'maq', label: 'Exige maquinário', type: 'select', opts: SN, req: 1 }],
      rows: [['Gradagem', 'Mecanização', 'Lavoura · Soja', [FAZ[0]], 'Sim'], ['Pulverização', 'Mecanização', 'Lavoura · Milho safrinha', [FAZ[1]], 'Sim'], ['Roçagem', 'Mecanização', 'Pecuária · Pastagens', [FAZ[2], FAZ[1]], 'Sim'], ['Reparo de cerca', 'Serviços Gerais', 'Infraestrutura · Cercas', FAZ.slice(), 'Não'], ['Vacinação do rebanho', 'Serviços Gerais', 'Pecuária · Sanidade', [FAZ[0]], 'Não'], ['Capina manual', 'Serviços Gerais', 'Pecuária · Pastagens', [FAZ[1]], 'Não', false]].map((v) => row(['nome', 'tipo', 'cc', 'fazendas', 'maq'])(v.slice(0, 5), v[5] !== false)) },

    'Tipos de serviço': { singular: 'tipo de serviço',
      cols: [{ k: 'nome', label: 'Tipo de serviço', req: 1 }],
      rows: [['Mecanização'], ['Serviços Gerais'], ['Administrativo']].map(row(['nome'])) },

    'Classificações': { singular: 'classificação', erp: true, importTipo: 'Classificação',
      cols: [{ k: 'codigo', label: 'Código', sync: 1, width: 140 }, { k: 'nome', label: 'Classificação', sync: 1 }, { k: 'categoria', label: 'Categoria', sync: 1 }],
      rows: [['3.1.02', 'Preparo de solo', 'Custo'], ['3.1.05', 'Implantação de lavoura', 'Custo'], ['3.4.01', 'Conservação de pastagem', 'Custo'], ['4.2.03', 'Sanidade animal', 'Custo'], ['7.2.14', 'Manutenção de benfeitorias', 'Investimento'], ['7.5.01', 'Aquisição de máquinas', 'Investimento']].map(row(['codigo', 'nome', 'categoria'])) },

    'Tipos de maquinário': { singular: 'tipo de maquinário',
      cols: [{ k: 'nome', label: 'Tipo de maquinário', req: 1 }, { k: 'medicao', label: 'Medição de uso', type: 'select', opts: ['Horas', 'Km'], req: 1 }],
      rows: TIPOS_MAQ.map((t) => row(['nome', 'medicao'])([t, /Veículo|Transporte|Moto/.test(t) ? 'Km' : 'Horas'])) },

    'Modelos de maquinário': { singular: 'modelo',
      cols: [{ k: 'nome', label: 'Modelo', req: 1 }, { k: 'tipo', label: 'Tipo de maquinário', type: 'select', opts: TIPOS_MAQ, req: 1 }, { k: 'fabricante', label: 'Fabricante' }],
      rows: [['John Deere 5055E', 'Trator', 'John Deere'], ['Polaris Sportsman 570', 'Quadriciclo e UTV', 'Polaris'], ['Polaris Ranger', 'Quadriciclo e UTV', 'Polaris'], ['Toyota Hilux', 'Veículo de Apoio', 'Toyota'], ['Fiat Toro', 'Transporte de Administração', 'Fiat'], ['Stemac ST180', 'Gerador', 'Stemac'], ['Buffalo BFDE 4', 'Motor estacionário', 'Buffalo']].map(row(['nome', 'tipo', 'fabricante'])) },

    'Planos de manutenção': { singular: 'plano de manutenção', dup: 'Já existe um plano com esse nome.',
      cols: [
        { k: 'nome', label: 'Plano', req: 1, full: 1 },
        { k: 'tipo', label: 'Tipo de manutenção', type: 'select', opts: ['Preventiva', 'Periódica', 'Garantia', 'Corretiva'], req: 1 },
        { k: 'modelo', label: 'Modelo', type: 'select', opts: MODELOS, req: 1 },
        { k: 'unidade', label: 'Unidade', type: 'select', opts: ['Horas', 'Km', 'Dias'], req: 1, hide: 1 },
        { k: 'freq', label: 'Frequência', type: 'num', appendFrom: 'unidade', fmt: (r) => r.freq ? r.freq + ' ' + r.unidade.toLowerCase() : '—' },
        { k: 'limite', label: 'Limite de revisão', type: 'num', appendFrom: 'unidade', hide: 1 },
        { k: 'atencao', label: 'Alerta de atenção antes', type: 'num', appendFrom: 'unidade', hide: 1 },
        { k: 'materiais', label: 'Materiais', type: 'multi', opts: MATS, full: 1, fmt: (r) => r.materiais.length ? r.materiais.length + (r.materiais.length === 1 ? ' material' : ' materiais') : '—' },
      ],
      rows: [
        ['5055E Padrão - 300Hrs', 'Preventiva', 'John Deere 5055E', 'Horas', '300', '315', '15', MATS.slice(0, 3)],
        ['5055E Padrão - 500Hrs', 'Preventiva', 'John Deere 5055E', 'Horas', '500', '515', '15', MATS.slice(0, 3)],
        ['QUAD POLARIS - Padrão 100Hrs', 'Preventiva', 'Polaris Sportsman 570', 'Horas', '100', '110', '15', [MATS[4], MATS[0]]],
        ['UTV RANGER - Padrão - 80Hrs', 'Preventiva', 'Polaris Ranger', 'Horas', '80', '90', '15', [MATS[4]]],
        ['Hilux Padrão - 10.000km', 'Preventiva', 'Toyota Hilux', 'Km', '10000', '10500', '500', [MATS[3], MATS[0]]],
        ['Gerador - Troca de óleo 60 dias', 'Periódica', 'Stemac ST180', 'Dias', '60', '70', '15', [MATS[0]]],
        ['Gerador - Troca de filtros 120 dias', 'Periódica', 'Stemac ST180', 'Dias', '120', '135', '20', [MATS[1], MATS[5]]],
        ['Motobomba - Inspeção 90 dias', 'Periódica', 'Buffalo BFDE 4', 'Dias', '90', '100', '15', []],
        ['QUAD POLARIS - Garantia 100Hrs', 'Garantia', 'Polaris Sportsman 570', 'Horas', '100', '110', '15', [MATS[4]]],
        ['Fiat Toro - Garantia 20.000Km', 'Garantia', 'Fiat Toro', 'Km', '20000', '21000', '1000', [MATS[3]]],
        ['Troca de embreagem', 'Corretiva', 'John Deere 5055E', 'Horas', '', '', '', [], false],
      ].map((v) => row(['nome', 'tipo', 'modelo', 'unidade', 'freq', 'limite', 'atencao', 'materiais'])(v.slice(0, 8), v[8] !== false)) },

    'Materiais': { singular: 'material',
      cols: [{ k: 'codigo', label: 'Código', req: 1, width: 110 }, { k: 'nome', label: 'Material', req: 1, full: 1 }, { k: 'fabricante', label: 'Fabricante' }, { k: 'unidade', label: 'Unidade', type: 'select', opts: ['UN', 'L', 'KG'], req: 1 }, { k: 'estoque', label: 'Estoque', type: 'num' }],
      rows: [['12', MATS[0], 'JOHN DEERE', 'L', '41'], ['23', MATS[1], 'JOHN DEERE', 'UN', '23'], ['34', MATS[2], 'DIVERSOS', 'UN', '34'], ['09', MATS[3], 'DIVERSOS', 'UN', '12'], ['41', 'GRAXA DE LITIO', 'HUSQVARNA', 'KG', '8', false], ['53', MATS[5], 'DIVERSOS', 'UN', '17']].map((v) => row(['codigo', 'nome', 'fabricante', 'unidade', 'estoque'])(v.slice(0, 5), v[5] !== false)) },
  }
  window.CADASTROS = CADASTROS
})()
