package main

import (
	"sync"

	"github.com/mattermost/mattermost/server/public/plugin"
)

// Plugin implements the Mattermost plugin interface.
type Plugin struct {
	plugin.MattermostPlugin

	// configurationLock synchronizes access to the configuration.
	configurationLock sync.RWMutex

	// configuration is the active plugin configuration.
	configuration *Configuration

	// store wraps KV store operations for session persistence.
	store *Store
}

// OnActivate is called when the plugin is activated.
func (p *Plugin) OnActivate() error {
	p.store = NewStore(p.API)

	p.API.LogInfo("OpenClaw Live Status plugin activated")
	return nil
}

// OnDeactivate is called when the plugin is deactivated.
func (p *Plugin) OnDeactivate() error {
	// Mark all active sessions as interrupted
	sessions, err := p.store.ListActiveSessions()
	if err != nil {
		p.API.LogWarn("Failed to list sessions on deactivate", "error", err.Error())
	} else {
		for _, s := range sessions {
			s.Status = "interrupted"
			_ = p.store.SaveSession(s.SessionKey, s)
			p.broadcastUpdate(s.ChannelID, s)
		}
	}

	p.API.LogInfo("OpenClaw Live Status plugin deactivated")
	return nil
}
