/**
 * Jira Resource Validator
 *
 * Validates and creates Jira resources (projects, boards).
 * Split from external-resource-validator.ts for maintainability.
 *
 * NEW (v0.33.0): Reads configuration from config.json (ADR-0050 compliant)
 * - Secrets (API token, email) from .env
 * - Configuration (domain, strategy, projects, boards) from config.json
 *
 * @module utils/validators/jira-validator
 */
import type { JiraProject, JiraBoard, JiraValidationResult } from './types.js';
export type { JiraProject, JiraBoard, JiraValidationResult };
export declare class JiraResourceValidator {
    private apiToken;
    private email;
    private domain;
    private envPath;
    private projectRoot;
    constructor(envPath?: string);
    /**
     * Load .env file (secrets only)
     */
    private loadEnv;
    /**
     * Load config.json (ADR-0050: non-secrets configuration)
     *
     * NEW (v0.33.0): Configuration is read from config.json, NOT .env
     * This aligns JIRA with ADO init pattern.
     */
    private loadConfig;
    /**
     * Update config.json with new values (for project/board IDs after validation)
     */
    private updateConfig;
    /**
     * Update .env file with new values
     */
    private updateEnv;
    /**
     * Call Jira API
     *
     * @param endpoint - API endpoint (relative path)
     * @param method - HTTP method (GET, POST, PUT, etc.)
     * @param body - Request body (for POST/PUT)
     * @param apiType - API type: 'rest' for /rest/api/3, 'agile' for /rest/agile/1.0
     */
    private callJiraApi;
    /**
     * Fetch all Jira projects
     */
    fetchProjects(): Promise<JiraProject[]>;
    /**
     * Check if project exists
     */
    checkProject(projectKey: string): Promise<JiraProject | null>;
    /**
     * Create new Jira project
     */
    createProject(projectKey: string, projectName: string): Promise<JiraProject>;
    /**
     * Get current user ID (for project lead)
     */
    private getCurrentUserId;
    /**
     * Fetch all boards for a project
     *
     * Uses Agile API: GET /rest/agile/1.0/board?projectKeyOrId={projectKey}
     */
    fetchBoards(projectKey: string): Promise<JiraBoard[]>;
    /**
     * Check if board exists by ID
     *
     * Uses Agile API: GET /rest/agile/1.0/board/{boardId}
     * Also fetches board configuration to get project information.
     */
    checkBoard(boardId: number): Promise<JiraBoard | null>;
    /**
     * Create new Jira board
     *
     * Uses Agile API: POST /rest/agile/1.0/board
     */
    createBoard(boardName: string, projectKey: string): Promise<JiraBoard>;
    /**
     * Get or create filter for board
     */
    private getOrCreateFilter;
    /**
     * Validate and fix Jira configuration
     *
     * NEW (v0.33.0): Reads configuration from config.json (ADR-0050 compliant)
     * - Secrets (API token, email) from .env
     * - Configuration (domain, strategy, projects, boards) from config.json
     *
     * Structure levels:
     * - 1-level: project only (issueTracker.projects[].key)
     * - 2-level: project + boards (issueTracker.projects[].boards[])
     */
    validate(): Promise<JiraValidationResult>;
}
/**
 * Validate Jira resources
 */
export declare function validateJiraResources(envPath?: string): Promise<JiraValidationResult>;
//# sourceMappingURL=jira-validator.d.ts.map