"""
Jira MCP Tools for CQA Test Application
FastMCP-based Jira integration for issue management and project operations
"""

import os
import logging
from fastmcp import FastMCP
from lib.jira_client import JiraClient

logger = logging.getLogger(__name__)

# Check required environment variables
required_env_vars = ["JIRA_URL", "JIRA_PERSONAL_TOKEN"]
missing_vars = [var for var in required_env_vars if not os.getenv(var)]

if missing_vars:
    logger.warning(f"Missing required environment variables: {missing_vars}")
    logger.warning("Jira tools may not function properly without these variables")

# Initialize Jira client
jira_client = JiraClient()

# Create FastMCP instance for Jira tools
jira_mcp = FastMCP("CQA Jira MCP Server")


@jira_mcp.tool
def jira_list_projects():
    """List all accessible Jira projects"""
    logger.info("Executing jira_list_projects")
    return jira_client.list_projects()


@jira_mcp.tool
def jira_search_issues(jql, max_results=50):
    """Search Jira issues using JQL query

    Args:
        jql: JQL (Jira Query Language) query string
        max_results: Maximum number of results to return (default: 50)
    """
    logger.info(f"Executing jira_search_issues with jql: {jql}")
    return jira_client.search_issues(jql, max_results)


@jira_mcp.tool
def jira_get_issue(issue_key):
    """Get detailed information about a specific Jira issue

    Args:
        issue_key: Jira issue key (e.g., PROJ-123)
    """
    logger.info(f"Executing jira_get_issue with key: {issue_key}")
    return jira_client.get_issue(issue_key)


@jira_mcp.tool
def jira_get_comments(issue_key):
    """Get comments for a specific Jira issue

    Args:
        issue_key: Jira issue key (e.g., PROJ-123)
    """
    logger.info(f"Executing jira_get_comments with key: {issue_key}")
    return jira_client.get_issue_comments(issue_key)


@jira_mcp.tool
def jira_create_issue(
    project_key,
    summary,
    description,
    issue_type="Task",
    priority="Medium",
):
    """Create a new Jira issue

    Args:
        project_key: Jira project key
        summary: Issue summary/title
        description: Issue description
        issue_type: Issue type (e.g., Task, Bug, Story) (default: Task)
        priority: Issue priority (e.g., High, Medium, Low) (default: Medium)
    """
    logger.info(f"Creating Jira issue in project: {project_key}")
    return jira_client.create_issue(
        project_key, summary, description, issue_type, priority
    )


def get_jira_mcp_server():
    """Get the configured Jira MCP server instance"""
    return jira_mcp


def get_mcp_info():
    """Get MCP server information"""
    return {
        "server_name": "cqa-jira-mcp",
        "server_version": "1.0.0",
        "jira_connected": jira_client.is_connected(),
    }
