# Flow Deletion Guide - Complete Removal

## Overview

This guide explains how to completely remove a flow type from the application. The architecture ensures that **deleting a flow folder removes ALL related code** with zero dependencies remaining.

## Architecture Guarantee

✅ **Each flow folder is completely self-contained**
- All components, screens, hooks, services, utils, types are in the flow folder
- No dependencies on the flow folder from outside (except the registry)
- Deleting a folder = Removing all related functionality

## How to Delete a Flow Type

### Example: Removing Dealer Claim Flow

#### Step 1: Delete the Flow Folder
```bash
# Delete the entire dealer-claim folder
rm -rf src/flows/dealer-claim/
```

**What gets deleted:**
- ✅ `pages/RequestDetail.tsx` - Complete dealer claim detail screen
- ✅ All request detail components (OverviewTab, WorkflowTab, IOTab)
- ✅ All claim cards (5 cards)
- ✅ All modals (7 modals)
- ✅ Request creation wizard
- ✅ All future hooks, services, utils, types

#### Step 2: Update Flow Registry
```typescript
// src/flows/index.ts

// Remove import
// import * as DealerClaimFlow from './dealer-claim';

// Update FlowRegistry
export const FlowRegistry = {
  CUSTOM: CustomFlow,
  // DEALER_CLAIM: DealerClaimFlow,  // REMOVED
} as const;

// Update getRequestDetailScreen()
export function getRequestDetailScreen(flowType: RequestFlowType) {
  switch (flowType) {
    // case 'DEALER_CLAIM':           // REMOVED
    //   return DealerClaimFlow.DealerClaimRequestDetail;
    case 'CUSTOM':
    default:
      return CustomFlow.CustomRequestDetail;
  }
}

// Update other functions similarly
export function getOverviewTab(flowType: RequestFlowType) {
  switch (flowType) {
    // case 'DEALER_CLAIM':           // REMOVED
    //   return DealerClaimFlow.DealerClaimOverviewTab;
    case 'CUSTOM':
    default:
      return CustomFlow.CustomOverviewTab;
  }
}
```

#### Step 3: Update Type Definitions (Optional)
```typescript
// src/utils/requestTypeUtils.ts

// Remove from type union
export type RequestFlowType = 'CUSTOM'; // 'DEALER_CLAIM' removed

// Remove detection function (optional - can keep for backward compatibility)
// export function isDealerClaimRequest(request: any): boolean { ... }

// Update getRequestFlowType()
export function getRequestFlowType(request: any): RequestFlowType {
  // if (isDealerClaimRequest(request)) return 'DEALER_CLAIM';  // REMOVED
  return 'CUSTOM';
}
```

#### Step 4: Update Navigation (If Needed)
```typescript
// src/utils/requestNavigation.ts

export function navigateToCreateRequest(
  navigate: NavigateFunction,
  flowType: RequestFlowType = 'CUSTOM'
): void {
  // Remove dealer claim case
  // if (flowType === 'DEALER_CLAIM') {
  //   return '/claim-management';
  // }
  return '/new-request';
}
```

#### Step 5: Remove Routes (If Needed)
```typescript
// src/App.tsx

// Remove dealer claim route
// <Route 
//   path="/claim-management" 
//   element={<ClaimManagementWizard ... />} 
// />
```

**That's it!** All dealer claim code is completely removed.

## Verification Checklist

After deleting a flow, verify:

- [ ] Flow folder deleted
- [ ] FlowRegistry updated
- [ ] All `get*()` functions updated
- [ ] Type definitions updated (optional)
- [ ] Navigation updated (if needed)
- [ ] Routes removed (if needed)
- [ ] No broken imports
- [ ] Application compiles successfully
- [ ] No references to deleted flow in codebase

## What Happens When You Delete a Flow

### ✅ Removed
- Complete RequestDetail screen
- All flow-specific components
- All flow-specific modals
- All flow-specific cards
- Request creation wizard
- All flow-specific code

### ✅ Still Works
- Other flow types continue working
- Shared components remain
- Main RequestDetail router handles remaining flows
- Navigation for remaining flows

### ✅ No Orphaned Code
- No broken imports
- No dangling references
- No unused components
- Clean removal

## Current Flow Structure

### Custom Flow (`flows/custom/`)
**Contains:**
- `pages/RequestDetail.tsx` - Complete custom request detail screen
- `components/request-detail/` - Custom detail components
- `components/request-creation/` - Custom creation component

**To remove:** Delete `flows/custom/` folder and update registry

### Dealer Claim Flow (`flows/dealer-claim/`)
**Contains:**
- `pages/RequestDetail.tsx` - Complete dealer claim detail screen
- `components/request-detail/` - Dealer claim detail components
- `components/request-detail/claim-cards/` - 5 claim cards
- `components/request-detail/modals/` - 7 modals
- `components/request-creation/` - Claim management wizard

**To remove:** Delete `flows/dealer-claim/` folder and update registry

## Benefits of This Architecture

1. **True Modularity**: Each flow is independent
2. **Easy Removal**: Delete folder + update registry = Done
3. **No Side Effects**: Removing one flow doesn't affect others
4. **Clear Ownership**: Know exactly what belongs to which flow
5. **Maintainable**: All related code in one place
6. **Scalable**: Easy to add new flows

## Example: Complete Removal

```bash
# 1. Delete folder
rm -rf src/flows/dealer-claim/

# 2. Update registry (remove 3 lines)
# 3. Update type (remove 1 line)
# 4. Done! All dealer claim code is gone.
```

**Time to remove a flow:** ~2 minutes

## Conclusion

The architecture ensures that **deleting a flow folder removes ALL related code**. There are no dependencies, no orphaned files, and no cleanup needed. Each flow is a complete, self-contained module that can be added or removed independently.
