1package app23import (4 "math/rand/v2"56 "github.com/FelineStateMachine/puzzletea/config"7 sessionflow "github.com/FelineStateMachine/puzzletea/session"8 "github.com/FelineStateMachine/puzzletea/store"910 tea "charm.land/bubbletea/v2"11)1213func (m model) handleCreateGenerate() (model, tea.Cmd) {14 leaves := m.create.selectedLeaves()15 if len(leaves) == 0 {16 return m.setErrorf("Select at least one puzzle."), nil17 }1819 elo, err := m.create.elo()20 if err != nil {21 return m.setErrorf("Invalid Elo: %v", err), nil22 }2324 leaf := leaves[m.createChoiceIndex(len(leaves))]25 spawner, modeTitle, err := m.create.resolveLeafVariant(leaf, elo)26 if err != nil {27 return m.setErrorf("Could not prepare puzzle: %v", err), nil28 }2930 if err := m.persistCreatePreset(); err != nil {31 return m.setErrorf("Could not save create settings: %v", err), nil32 }3334 seed := ""35 name := sessionflow.GenerateUniqueName(m.store)36 run := store.NormalRunMetadata()37 if len(leaves) == 1 {38 seed = normalizedCreateSeed(m.create.seedInput.Value())39 }40 if seed != "" {41 name = sessionflow.SeededNameForCreateLeaf(seed, leaf.gameType, leaf.id, elo)42 run = store.SeededRunMetadata(seed)43 rec, err := m.store.GetDailyGame(name)44 if err != nil {45 return m.setErrorf("Could not check saved seeded puzzle: %v", err), nil46 }47 if rec != nil {48 var resumed bool49 m, resumed = m.importAndActivateRecord(*rec)50 if resumed {51 if err := sessionflow.ResumeAbandonedDeterministicRecord(m.store, rec); err != nil {52 m = m.setErrorf("%v", err)53 }54 }55 return m, nil56 }57 } else {58 seed = name59 }6061 cmd := newSessionController(&m).startEloSpawn(spawner, seed, elo, spawnRequest{62 source: spawnSourceNormal,63 name: name,64 gameType: leaf.gameType,65 modeTitle: modeTitle,66 run: run,67 returnState: createView,68 exitState: mainMenuView,69 })70 return m, cmd71}7273func (m model) createChoiceIndex(n int) int {74 if n <= 1 {75 return 076 }77 if m.createRandIndex != nil {78 idx := m.createRandIndex(n)79 if idx < 0 || idx >= n {80 return 081 }82 return idx83 }84 return rand.IntN(n)85}8687func (m model) persistCreatePresetIfValid() model {88 if len(m.create.selectedLeaves()) == 0 {89 return m90 }91 if _, err := m.create.elo(); err != nil {92 return m93 }94 if err := m.persistCreatePreset(); err != nil {95 return m.setErrorf("Could not save create settings: %v", err)96 }97 return m98}99100func (m model) persistCreatePreset() error {101 if m.cfg == nil {102 m.cfg = config.Default()103 }104 elo, err := m.create.elo()105 if err != nil {106 return err107 }108 m.cfg.Create.SelectedLeafIDs = m.create.selectedLeafIDs()109 m.cfg.Create.Elo = int(elo)110 if m.configPath == "" {111 return nil112 }113 return m.cfg.Save(m.configPath)114}