# Calendar Manager - Workflows Detalhados

## Workflow CRIAR Eventos

### Passo 1: Analisar Pedido

```javascript
// Input: "Agenda Dra Susana amanha 14:30"

const analise = {
  texto: "Agenda Dra Susana amanha 14:30",
  palavras_chave: ["dra", "susana"],
  data_mencionada: "amanha",
  hora_mencionada: "14:30",
  duracao_mencionada: null  // default 1h
};
```

### Passo 2: Classificar Tipo

```javascript
// Detectar palavras-chave e determinar calendario
function classificarEvento(texto) {
  const keywords_pessoal = /dra?|dentista|medico|familia|ginasio|consulta/i;
  const keywords_cliente = /carstuff|familyclinic|kcg|espiral|solar|reuniao|call/i;
  const keywords_profissional = /planeamento|sprint|deploy|interno|equipa/i;

  if (keywords_pessoal.test(texto)) {
    return {
      tipo: 'pessoal',
      calendar_id: 'emanuelalmeidaa@gmail.com'
    };
  }

  if (keywords_cliente.test(texto)) {
    return {
      tipo: 'clientes',
      calendar_id: 'info@descomplicar.pt'
    };
  }

  if (keywords_profissional.test(texto)) {
    return {
      tipo: 'profissional',
      calendar_id: 'emanuel@descomplicar.pt'
    };
  }

  // Se ambiguo, perguntar
  return { tipo: 'ambiguo' };
}
```

### Passo 3: Extrair Data e Hora

```javascript
// Obter data actual via mcp-time
const now = await mcp__mcp_time__current_time();

// Interpretar data mencionada
function interpretarData(mencao, hoje) {
  const mapa = {
    'hoje': hoje,
    'amanha': addDays(hoje, 1),
    'segunda': nextWeekday(hoje, 1),
    'terca': nextWeekday(hoje, 2),
    // etc.
  };

  return mapa[mencao.toLowerCase()] || parseDate(mencao);
}

// Criar timestamps ISO 8601
const data = interpretarData('amanha', now);
const start_time = `${data}T14:30:00`;
const end_time = `${data}T15:30:00`;  // +1h default
```

### Passo 4: Verificar Conflitos

```javascript
// Buscar eventos existentes no horario
const eventos_conflito = await mcp__google_workspace__get_events({
  user_google_email: 'emanuelalmeidaa@gmail.com',
  calendar_id: 'ALL',
  time_min: start_time,
  time_max: end_time
});

if (eventos_conflito.length > 0) {
  // Avisar utilizador sobre conflito
}
```

### Passo 5: Criar Evento

```javascript
const evento = await mcp__google_workspace__create_event({
  user_google_email: 'emanuelalmeidaa@gmail.com',
  calendar_id: classificacao.calendar_id,
  summary: 'Dra Susana',
  start_time: start_time,
  end_time: end_time,
  timezone: 'Europe/Lisbon',
  description: 'Criado via Claude Code /calendar-manager'
});
```

## Workflow LISTAR Eventos

### Passo 1: Interpretar Pedido

```javascript
// Input: "Agenda de amanha"
const pedido = {
  periodo: 'amanha',  // hoje, amanha, semana, mes, data especifica
  ambito: 'todos',    // todos, pessoal, profissional, clientes
};
```

### Passo 2: Determinar Intervalo

```javascript
const now = await mcp__mcp_time__current_time();

function calcularIntervalo(periodo, hoje) {
  const intervalos = {
    'hoje': {
      time_min: `${hoje}T00:00:00`,
      time_max: `${hoje}T23:59:59`
    },
    'amanha': {
      time_min: `${addDays(hoje, 1)}T00:00:00`,
      time_max: `${addDays(hoje, 1)}T23:59:59`
    },
    'semana': {
      time_min: `${startOfWeek(hoje)}T00:00:00`,
      time_max: `${endOfWeek(hoje)}T23:59:59`
    }
  };

  return intervalos[periodo];
}
```

### Passo 3: Consultar Calendarios

```javascript
// Determinar calendarios a consultar baseado no ambito
const calendarios = pedido.ambito === 'todos'
  ? ['emanuelalmeidaa@gmail.com', 'emanuel@descomplicar.pt', 'info@descomplicar.pt']
  : [mapearAmbito(pedido.ambito)];

// Buscar eventos em paralelo
const resultados = await Promise.all(
  calendarios.map(cal_id =>
    mcp__google_workspace__get_events({
      user_google_email: 'emanuelalmeidaa@gmail.com',
      calendar_id: cal_id,
      time_min: intervalo.time_min,
      time_max: intervalo.time_max
    })
  )
);
```

### Passo 4: Agrupar e Formatar

```javascript
// Agrupar por tipo e ordenar por hora
const eventos_agrupados = {
  pessoal: resultados[0].sort(byTime),
  profissional: resultados[1].sort(byTime),
  clientes: resultados[2].sort(byTime)
};
```

### Passo 5: Sugestoes Inteligentes

- Se ha muitas reunioes seguidas: avisar sobrecarga
- Se nao ha breaks: sugerir pausas de 15min entre reunioes
