package tui import ( "context" "fmt" "tailscale-vpn/internal/pages" "tailscale-vpn/internal/services" tea "charm.land/bubbletea/v2" ) func checkVPNStatusCmd(store *services.ServicesStore) tea.Cmd { return func() tea.Msg { ctx := context.Background() connected, err := store.VPN.CheckStatus(ctx) return pages.VPNStatusMsg{ Connected: connected, Err: err, } } } func turnOnVPNCmd(store *services.ServicesStore) tea.Cmd { return func() tea.Msg { ctx := context.Background() if err := store.VPN.TurnOn(ctx); err != nil { return pages.VPNToggleMsg{ Connected: false, Err: err, } } connected, _ := store.VPN.CheckStatus(ctx) return pages.VPNToggleMsg{ Connected: connected, Err: nil, } } } func turnOffVPNCmd(store *services.ServicesStore) tea.Cmd { return func() tea.Msg { ctx := context.Background() if err := store.VPN.TurnOff(ctx); err != nil { return pages.VPNToggleMsg{ Connected: true, Err: err, } } connected, _ := store.VPN.CheckStatus(ctx) return pages.VPNToggleMsg{ Connected: connected, Err: nil, } } } func loadServersCmd(store *services.ServicesStore) tea.Cmd { return func() tea.Msg { servers := store.Config.GetServers() return pages.ServerListLoadedMsg{ Servers: servers, Err: nil, } } } func addServerCmd(store *services.ServicesStore, name, host string) tea.Cmd { return func() tea.Msg { err := store.Config.AddServer(name, host) return pages.ServerSaveMsg{Err: err} } } func updateServerCmd(store *services.ServicesStore, id, name, host string) tea.Cmd { return func() tea.Msg { err := store.Config.UpdateServer(id, name, host) return pages.ServerSaveMsg{Err: err} } } func deleteServerCmd(store *services.ServicesStore, id string) tea.Cmd { return func() tea.Msg { err := store.Config.RemoveServer(id) return pages.ServerDeleteMsg{Err: err} } } func selectServerCmd(store *services.ServicesStore, serverID string) tea.Cmd { return func() tea.Msg { err := store.Config.SetSelectedServer(serverID) if err != nil { return pages.ServerSelectedMsg{Err: err} } server, ok := store.Config.GetSelectedServer() if !ok { return pages.ServerSelectedMsg{Err: fmt.Errorf("failed to get selected server")} } return pages.ServerSelectedMsg{Server: server, Err: nil} } }