package db

import "github.com/gotunnel/pkg/protocol"

// Client 客户端数据
type Client struct {
	ID       string               `json:"id"`
	Nickname string               `json:"nickname,omitempty"`
	Rules    []protocol.ProxyRule `json:"rules"`
}

// PluginData 插件数据
type PluginData struct {
	Name        string            `json:"name"`
	Version     string            `json:"version"`
	Type        string            `json:"type"`
	Source      string            `json:"source"`
	Description string            `json:"description"`
	Author      string            `json:"author"`
	Checksum    string            `json:"checksum"`
	Size        int64             `json:"size"`
	Enabled     bool              `json:"enabled"`
	WASMData    []byte            `json:"-"`
}

// ClientStore 客户端存储接口
type ClientStore interface {
	GetAllClients() ([]Client, error)
	GetClient(id string) (*Client, error)
	CreateClient(c *Client) error
	UpdateClient(c *Client) error
	DeleteClient(id string) error
	ClientExists(id string) (bool, error)
	GetClientRules(id string) ([]protocol.ProxyRule, error)
	Close() error
}

// PluginStore 插件存储接口
type PluginStore interface {
	GetAllPlugins() ([]PluginData, error)
	GetPlugin(name string) (*PluginData, error)
	SavePlugin(p *PluginData) error
	DeletePlugin(name string) error
	SetPluginEnabled(name string, enabled bool) error
	GetPluginWASM(name string) ([]byte, error)
}

// Store 统一存储接口
type Store interface {
	ClientStore
	PluginStore
	Close() error
}
