# Schematic Workflow Fix - Issue #26

## Problem Summary

The schematic workflow was completely broken due to incorrect usage of the kicad-skip library:

1. **`create_project`** only created PCB files, no schematic
2. **`create_schematic`** created orphaned schematic files not linked to projects
3. **`add_schematic_component`** called non-existent `schematic.add_symbol()` method
4. Project files didn't reference schematics in their structure

## Root Cause

The kicad-skip library **does not support creating symbols from scratch**. The only way to add symbols is by **cloning existing symbol instances**.

From kicad-skip documentation:

> "symbols: these don't have a new()" because they require complex mappings to library elements, pins, and properties.

## Solution

### 1. Template-Based Approach

Created a template schematic (`python/templates/template_with_symbols.kicad_sch`) with:

- Complete `lib_symbols` section defining R, C, LED symbols
- Three template symbol instances placed off-screen at (-100, -110, -120)
- Template symbols marked as `dnp yes`, `in_bom no`, `on_board no` so they don't interfere

### 2. Updated Files

**python/commands/project.py:**

- Now creates both `.kicad_pcb` AND `.kicad_sch` files
- Project file includes schematic reference in `sheets` array
- Copies template schematic with cloneable symbols

**python/commands/schematic.py:**

- Uses template file instead of creating from scratch
- Proper minimal schematic structure when template unavailable

**python/commands/component_schematic.py:**

- Completely rewritten to use `clone()` API
- Maps component types to template symbols
- Proper UUID generation for each cloned symbol
- Correct position setting: `symbol.at.value = [x, y, rotation]`

### 3. Correct Workflow

```python
from commands.project import ProjectCommands
from commands.schematic import SchematicManager
from commands.component_schematic import ComponentManager

# Step 1: Create project (creates both PCB and schematic)
project_cmd = ProjectCommands()
result = project_cmd.create_project({
    "name": "MyProject",
    "path": "/path/to/project"
})

# Step 2: Load the schematic
sch = SchematicManager.load_schematic(result['project']['schematicPath'])

# Step 3: Add components by cloning templates
component_def = {
    "type": "R",           # Maps to _TEMPLATE_R
    "reference": "R1",     # Component reference
    "value": "10k",        # Component value
    "footprint": "Resistor_SMD:R_0603_1608Metric",
    "x": 50.8,            # Position in mm
    "y": 50.8,            # Position in mm
    "rotation": 0         # Rotation in degrees
}
symbol = ComponentManager.add_component(sch, component_def)

# Step 4: Save the schematic
SchematicManager.save_schematic(sch, result['project']['schematicPath'])
```

## Supported Component Types

Currently supported template symbols:

- `R` - Resistor (maps to `_TEMPLATE_R`)
- `C` - Capacitor (maps to `_TEMPLATE_C`)
- `D` or `LED` - LED (maps to `_TEMPLATE_D`)

To add more component types, update:

1. `python/templates/template_with_symbols.kicad_sch` - Add lib_symbol definition and template instance
2. `python/commands/component_schematic.py` - Add mapping in `TEMPLATE_MAP`

## Testing

Comprehensive test created at `/tmp/test_schematic_workflow.py`:

- Creates project with schematic
- Loads schematic
- Adds R, C, LED components
- Saves schematic
- Validates with `kicad-cli sch export pdf`

All tests passing ✓

## Files Modified

- `python/commands/project.py` - Added schematic creation
- `python/commands/schematic.py` - Fixed template usage
- `python/commands/component_schematic.py` - Rewritten to use clone() API
- `python/templates/empty.kicad_sch` - Minimal template (created)
- `python/templates/template_with_symbols.kicad_sch` - Template with cloneable symbols (created)

## Limitations

1. Can only add components that have templates defined
2. Template symbols remain in schematic (but marked as DNP/not in BOM)
3. Complex symbols (multi-unit, hierarchical) may need custom templates

## Future Improvements

1. Add more component templates (transistors, connectors, ICs)
2. Dynamic template generation from KiCad symbol libraries
3. Auto-hide template symbols in schematic
4. Support for custom user templates

## References

- GitHub Issue: #26
- kicad-skip documentation: https://github.com/psychogenic/kicad-skip
- Test results: `/tmp/test_schematic_workflow/`
