import type { ToolConfig } from './index'
import { useSnapshotsStore } from '../../../stores/snapshots'

export function createSnapshotHandlers(): ToolConfig[] {
  return [
    {
      name: 'save_canvas_snapshot',
      description: 'Captura y guarda el estado actual del canvas (HTML, CSS, scripts, ventanas) como un snapshot restaurable.',
      category: 'canvas',
      schema: {
        type: 'object',
        properties: {
          name: { type: 'string', description: 'Nombre descriptivo del snapshot' }
        },
        required: ['name']
      },
      handler: async (args: { name: string }) => {
        try {
          const store = useSnapshotsStore()
          const id = await store.save(args.name)
          return `Snapshot "${args.name}" guardado con ID: ${id}`
        } catch (e: any) {
          return `Error al guardar snapshot: ${e.message}`
        }
      }
    },
    {
      name: 'load_canvas_snapshot',
      description: 'Restaura un snapshot del canvas previamente guardado. Reemplaza todo el contenido actual.',
      category: 'canvas',
      schema: {
        type: 'object',
        properties: {
          id: { type: 'string', description: 'ID del snapshot a restaurar' }
        },
        required: ['id']
      },
      handler: async (args: { id: string }) => {
        try {
          const store = useSnapshotsStore()
          await store.restore(args.id)
          return `Snapshot "${args.id}" restaurado`
        } catch (e: any) {
          return `Error al restaurar snapshot: ${e.message}`
        }
      }
    },
    {
      name: 'list_canvas_snapshots',
      description: 'Lista todos los snapshots del canvas guardados.',
      category: 'canvas',
      schema: {
        type: 'object',
        properties: {}
      },
      handler: async () => {
        try {
          const store = useSnapshotsStore()
          const items = await store.list()
          if (items.length === 0) {
            return 'No hay snapshots guardados'
          }
          const list = items.map(s => {
            const date = new Date(s.created_at).toLocaleString()
            return `- ${s.id}: "${s.name}" (${date})`
          }).join('\n')
          return `Snapshots guardados (${items.length}):\n${list}`
        } catch (e: any) {
          return `Error: ${e.message}`
        }
      }
    },
    {
      name: 'delete_canvas_snapshot',
      description: 'Elimina un snapshot del canvas.',
      category: 'canvas',
      schema: {
        type: 'object',
        properties: {
          id: { type: 'string', description: 'ID del snapshot a eliminar' }
        },
        required: ['id']
      },
      handler: async (args: { id: string }) => {
        try {
          const store = useSnapshotsStore()
          await store.remove(args.id)
          return `Snapshot "${args.id}" eliminado`
        } catch (e: any) {
          return `Error: ${e.message}`
        }
      }
    }
  ]
}
