# Sistema de Planos - Roadmap

## Status: Estrutura Frontend Criada ✅

### O que foi criado no Frontend:
1. **Menu Item** adicionado em `/superadmin/layout.tsx`
   - Nova rota: `/superadmin/plans`

2. **Página Principal de Planos** (`/superadmin/plans/page.tsx`)
   - Lista todos os planos em grid
   - Mostra: nome, descrição, faixa de usuários, preços, features, diferenciais
   - Botão "Novo Plano"
   - Botões Editar e Deletar
   - Status visual (ativo/inativo)

3. **Página de Edição de Plano** (`/superadmin/plans/[id]/page.tsx`)
   - Formulário completo para editar:
     - Informações básicas (nome, slug, descrição)
     - Faixa de usuários (min/max)
     - Preços (mensal/anual)
     - Armazenamento (GB)
     - Status (ativo/inativo)
   - TODO: Editor de Features e Diferenciais

---

## Próximos Passos - Backend

### 1. Modelo de Dados (Domain)
```go
// internal/domain/plan.go
type Plan struct {
    ID              string        `json:"id"`
    Name            string        `json:"name"`
    Slug            string        `json:"slug"`
    Description     string        `json:"description"`
    MinUsers        int           `json:"min_users"`
    MaxUsers        int           `json:"max_users"` // -1 = unlimited
    MonthlyPrice    *decimal.Decimal `json:"monthly_price"`
    AnnualPrice     *decimal.Decimal `json:"annual_price"`
    Features        pq.StringArray   `json:"features"` // CRM, ERP, etc
    Differentiators pq.StringArray   `json:"differentiators"`
    StorageGB       int           `json:"storage_gb"`
    IsActive        bool          `json:"is_active"`
    CreatedAt       time.Time     `json:"created_at"`
    UpdatedAt       time.Time     `json:"updated_at"`
}

type Subscription struct {
    ID            string    `json:"id"`
    AgencyID      string    `json:"agency_id"`
    PlanID        string    `json:"plan_id"`
    BillingType   string    `json:"billing_type"` // monthly/annual
    CurrentUsers  int       `json:"current_users"`
    Status        string    `json:"status"` // active/suspended/cancelled
    StartDate     time.Time `json:"start_date"`
    RenewalDate   time.Time `json:"renewal_date"`
    CreatedAt     time.Time `json:"created_at"`
    UpdatedAt     time.Time `json:"updated_at"`
}
```

### 2. Migrations
- `001_create_plans_table.sql`
- `002_create_agency_subscriptions_table.sql`
- `003_add_plan_id_to_agencies.sql`

### 3. Repository
- `PlanRepository` (CRUD)
- `SubscriptionRepository` (CRUD)

### 4. Service
- `PlanService` (validações, lógica)
- `SubscriptionService` (validar limite de usuários, etc)

### 5. Handlers (API)
```
GET    /api/admin/plans           - Listar planos
POST   /api/admin/plans           - Criar plano
GET    /api/admin/plans/:id       - Obter plano
PUT    /api/admin/plans/:id       - Atualizar plano
DELETE /api/admin/plans/:id       - Deletar plano

GET    /api/admin/subscriptions   - Listar subscrições
```

### 6. Seeds
- Seed dos 4 planos padrão (Ignição, Órbita, Cosmos, Enterprise)

---

## Dados Padrão para Seed

```json
[
  {
    "name": "Ignição",
    "slug": "ignition",
    "description": "Ideal para pequenas agências iniciantes",
    "min_users": 1,
    "max_users": 30,
    "monthly_price": 199.99,
    "annual_price": 1919.90,
    "features": ["CRM", "ERP", "Projetos", "Helpdesk", "Pagamentos", "Contratos", "Documentos"],
    "differentiators": [],
    "storage_gb": 1,
    "is_active": true
  },
  {
    "name": "Órbita",
    "slug": "orbit",
    "description": "Para agências em crescimento",
    "min_users": 31,
    "max_users": 100,
    "monthly_price": 399.99,
    "annual_price": 3839.90,
    "features": ["CRM", "ERP", "Projetos", "Helpdesk", "Pagamentos", "Contratos", "Documentos"],
    "differentiators": ["Suporte prioritário"],
    "storage_gb": 1,
    "is_active": true
  },
  {
    "name": "Cosmos",
    "slug": "cosmos",
    "description": "Para agências consolidadas",
    "min_users": 101,
    "max_users": 300,
    "monthly_price": 799.99,
    "annual_price": 7679.90,
    "features": ["CRM", "ERP", "Projetos", "Helpdesk", "Pagamentos", "Contratos", "Documentos"],
    "differentiators": ["Gerente de conta dedicado", "API integrações"],
    "storage_gb": 1,
    "is_active": true
  },
  {
    "name": "Enterprise",
    "slug": "enterprise",
    "description": "Solução customizada para grandes agências",
    "min_users": 301,
    "max_users": -1,
    "monthly_price": null,
    "annual_price": null,
    "features": ["CRM", "ERP", "Projetos", "Helpdesk", "Pagamentos", "Contratos", "Documentos"],
    "differentiators": ["Armazenamento customizado", "Treinamento personalizado"],
    "storage_gb": 1,
    "is_active": true
  }
]
```

---

## Integração com Agências

Quando agência se cadastra:
1. Seleciona um plano
2. Sistema cria `Subscription` com status `active` ou `pending_payment`
3. Agência herda limite de usuários do plano
4. Ao criar usuário: validar se não ultrapassou limite

---

## Features Futuras
- [ ] Editor de Features e Diferenciais (drag-drop no frontend)
- [ ] Planos promocionais (duplicar existente, editar preço)
- [ ] Validações de limite de usuários por plano
- [ ] Dashboard com uso atual vs limite
- [ ] Alertas quando próximo do limite
- [ ] Integração com Stripe/PagSeguro

---

**Pronto para começar?**
