# #region Test.TranslatePlugin [C:3] [TYPE Module] [SEMANTICS test,translate,plugin,interface]
# @BRIEF Tests for plugin.py — TranslatePlugin class.
# @RELATION BINDS_TO -> [TranslatePlugin]
# @TEST_CONTRACT: properties -> str | id, name, description, version
# @TEST_CONTRACT: get_schema -> dict | JSON schema with source_dialect, target_dialect, job_id
# @TEST_CONTRACT: execute -> NotImplementedError | deferred implementation

import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent.parent.parent / "src"))

import os
os.environ.setdefault("SECRET_KEY", "test-secret-key-for-testing")
os.environ.setdefault("DATABASE_URL", "sqlite:///:memory:")
os.environ.setdefault("AUTH_DATABASE_URL", "sqlite:///:memory:")

import pytest

from src.plugins.translate.plugin import TranslatePlugin


class TestTranslatePlugin:
    """TranslatePlugin — metadata properties and schema."""

    def setup_method(self):
        self.plugin = TranslatePlugin()

    def test_id(self):
        """Plugin ID is 'translate'."""
        assert self.plugin.id == "translate"

    def test_name(self):
        """Plugin name is 'LLM Table Translation'."""
        assert self.plugin.name == "LLM Table Translation"

    def test_description(self):
        """Plugin description is about cross-dialect SQL translation."""
        desc = self.plugin.description
        assert "Cross-dialect" in desc
        assert "SQL" in desc

    def test_version(self):
        """Plugin version is 1.0.0."""
        assert self.plugin.version == "1.0.0"

    def test_get_schema_structure(self):
        """Schema is a dict with type, properties, required."""
        schema = self.plugin.get_schema()
        assert isinstance(schema, dict)
        assert schema["type"] == "object"
        assert "properties" in schema
        assert "required" in schema

    def test_get_schema_contains_source_dialect(self):
        """Schema includes source_dialect string field."""
        props = self.plugin.get_schema()["properties"]
        assert "source_dialect" in props
        assert props["source_dialect"]["type"] == "string"

    def test_get_schema_contains_target_dialect(self):
        """Schema includes target_dialect string field."""
        props = self.plugin.get_schema()["properties"]
        assert "target_dialect" in props
        assert props["target_dialect"]["type"] == "string"

    def test_get_schema_contains_job_id(self):
        """Schema includes job_id string field."""
        props = self.plugin.get_schema()["properties"]
        assert "job_id" in props
        assert props["job_id"]["type"] == "string"

    def test_get_schema_required_job_id(self):
        """job_id is required."""
        schema = self.plugin.get_schema()
        assert "job_id" in schema["required"]

    @pytest.mark.asyncio
    async def test_execute_not_implemented(self):
        """execute raises NotImplementedError."""
        with pytest.raises(NotImplementedError, match="not yet implemented"):
            await self.plugin.execute({"job_id": "test"})
# #endregion Test.TranslatePlugin
