import React from 'react';

/**
 * @AI-Generated
 * 临床文档模板变量配置
 */
interface TemplateVariable {
    name: string;
    placeholder: string;
}

declare global {
    interface Window {
        updateTemplateVariables?: (variables: TemplateVariable[]) => void;
        onTemplateSaved?: (data: any) => void;
        __EDITOR_MODE__?: string;
        __ACTIVE_INPUT_ID?: string;
        __ACTIVE_INPUT_ELEMENT?: HTMLInputElement | HTMLTextAreaElement;
        __ACTIVE_INPUT_SELECTION?: {
            start: number | null;
            end: number | null;
            text: string;
        };
    }
}
interface RecordData {
    id?: string;
    templateName: string;
    content: string;
    variableValues: Record<string, string>;
    metaValues: Record<string, any>;
    saveTime: string;
    patientInfo?: {
        name?: string;
        admissionNumber?: string;
        department?: string;
    };
}
interface RecordInfo {
    id: string;
    templateName: string;
    saveTime: string;
    patientInfo?: {
        name?: string;
        admissionNumber?: string;
        department?: string;
    };
}
interface TemplateInfo {
    id: string;
    name: string;
    type: string;
    description: string;
    variables: string[] | Array<{
        name: string;
        placeholder: string;
        type?: string;
    }>;
    saveTime?: string;
    timestamp?: string;
    headerFooter?: any;
    createTime?: string;
    createdAt?: string;
    updatedAt?: string;
}
interface ClinicalTemplateEditorRef {
    getContent: (format?: 'html' | 'json' | 'markdown') => string;
    setContent: (content: string, format?: 'html' | 'json' | 'markdown') => void;
    getHtmlWithStyle: () => string;
    appendHtml: (html: string, options?: {
        pageBreak?: boolean;
    }) => void;
    getVariableValues: () => Record<string, string>;
    setVariableValues: (values: Record<string, string>) => void;
    getTemplateVariables: (templateName: string) => TemplateVariable[];
    getFieldValueById: (id: string) => any;
    getMode: () => 'readonly' | 'form' | 'design';
    setMode: (mode: 'readonly' | 'form' | 'design') => void;
    setReadOnly: (isReadOnly: boolean) => void;
    getAllowCopyPaste: () => boolean;
    setAllowCopyPaste: (allow: boolean) => void;
    getTemplateList: () => TemplateInfo[];
    selectTemplate: (templateName: string) => Promise<boolean>;
    getCurrentTemplate: () => string;
    switchTemplate: (templateName: string) => void;
    createTemplate: (templateData: {
        name: string;
        type?: string;
        description?: string;
        variables?: string[];
        content?: any;
    }) => Promise<boolean>;
    saveTemplate: (templateData: {
        name: string;
        type?: string;
        description?: string;
        variables?: string[];
        content?: any;
    }) => Promise<boolean>;
    updateTemplate: (templateName: string, templateData: {
        name?: string;
        type?: string;
        description?: string;
        variables?: string[];
        content?: any;
    }) => Promise<boolean>;
    deleteTemplate: (templateName: string) => Promise<boolean>;
    getRecordData: () => RecordData;
    setRecordData: (data: RecordData) => void;
    saveRecord: () => void;
    getSavedRecords: () => RecordInfo[];
    loadRecord: (recordId: string) => Promise<boolean>;
    deleteRecord: (recordId: string) => boolean;
    getBindObject: (id?: string) => Record<string, any>;
    setBindObject: (obj: any, id?: string) => void;
    getMetaObject?: (id?: string) => Record<string, any>;
    setMetaObject?: (data: Record<string, any>, id?: string) => void;
    getSelectedText: () => string;
    replaceSelectedText: (newText: string) => boolean;
    exportAs: (format: 'html' | 'pdf' | 'word') => Promise<Blob>;
    showPreview: () => void;
    print: () => void;
    printPreview: () => void;
    printWithOptions: (options?: {
        includeHeader?: boolean;
        includeFooter?: boolean;
        pageSize?: 'A4' | 'A3' | 'Letter';
        orientation?: 'portrait' | 'landscape';
        margins?: string;
    }) => void;
    control?: {
        insertField: (type: string, id?: string | null, attributes?: Record<string, any>) => void;
        insertRadioGroup: (id: string, data: Record<string, string>, newline?: boolean) => void;
        insertCheckboxGroup: (id: string, data: Record<string, string>, newline?: boolean) => void;
        insertSignature: (data?: string | null, id?: string, attributes?: Record<string, any>) => void;
        insertImage: (id: string, src?: string, attributes?: Record<string, any>) => void;
    };
    calculate?: {
        registerFunction: (name: string, fn: (...args: any[]) => any) => void;
        runExpression: (expression: string, context?: Record<string, any>) => any;
    };
    menstruation?: {
        getBindData: (id: string) => any;
        setBindData: (data: any, id: string) => void;
        updateFromText: (text: string, id?: string) => boolean;
        updateFromLatex: (latex: string, id?: string) => boolean;
    };
    temperatureChart?: {
        initializeChart: (config: {
            id: string;
            patientName: string;
            patientAge?: string;
            patientGender?: string;
            inDate: string;
            outDate: string;
            diagnosis: string;
            department: string;
            bedNumber: string;
            medicalNumber: string;
            days: number;
            bindVariable?: string;
        }) => void;
        getChartData: (id: string) => any;
        setChartData: (data: any, id: string) => void;
        updatePatientInfo: (info: {
            name?: string;
            age?: string;
            gender?: string;
            diagnosis?: string;
            department?: string;
            bedNumber?: string;
            medicalNumber?: string;
        }, id: string) => void;
    };
    execCommand: (command: string, params?: any) => any;
    validate?: () => boolean;
    setTableData?: (tableId: string, datalist: any[]) => void;
    getRevision?: () => any[];
    getFieldValue?: (field: HTMLElement) => any;
    /**
   * 通过文件导入并绑定数据到模板控件
   * @param file 要导入的数据文件
   */
    bindDataFromFile: (file: File) => Promise<void>;
    bindDataFromJSON: (json: string) => void;
}
interface ClinicalTemplateEditorProps {
    initialVariables?: Record<string, string>;
    templates?: TemplateInfo[];
    currentTemplateId?: string;
    onTemplateChange?: (templateId: string) => void;
    disableCopyPaste?: boolean;
    [key: string]: any;
}
declare const ClinicalTemplateEditor: React.ForwardRefExoticComponent<Omit<ClinicalTemplateEditorProps, "ref"> & React.RefAttributes<ClinicalTemplateEditorRef>>;

declare function exportHtmlFromJson(json: any, fileName?: string, mockData?: Record<string, any>): void;

interface NewTemplateModalProps {
    show: boolean;
    newTemplateName: string;
    setNewTemplateName: (v: string) => void;
    newTemplateType: string;
    setNewTemplateType: (v: string) => void;
    newTemplateDesc: string;
    setNewTemplateDesc: (v: string) => void;
    newTemplateVars: string;
    setNewTemplateVars: (v: string) => void;
    importedVariables: Array<{
        name: string;
        placeholder: string;
        type?: string;
        description?: string;
    }>;
    setImportedVariables: (v: Array<{
        name: string;
        placeholder: string;
        type?: string;
        description?: string;
    }>) => void;
    onCancel: () => void;
    onSave: () => void;
}
declare const NewTemplateModal: React.FC<NewTemplateModalProps>;

interface ChartConfig {
    width: number;
    height: number;
    tempMin: number;
    tempMax: number;
    pulseMin: number;
    pulseMax: number;
    gridCols: number;
    gridRows: number;
    chartStartY: number;
    chartHeight: number;
}
interface PatientData {
    name: string;
    age?: string;
    gender?: string;
    inDate: string;
    outDate: string;
    diag: string;
    dept: string;
    bed: string;
    medicalNo: string;
    dates: string[];
    times: string[];
    hospitalDays: (string | number)[];
    temperature: (number | string | null)[][];
    pulse: (number | null)[][];
    heartRate: (number | null)[][];
    breath: (number | null)[];
    bloodPressure: (string | null)[];
    intake: (string | null)[];
    output: (string | null)[];
    bowel: (string | null)[];
    urine: (string | null)[];
    height: (string | null)[];
    weight: (string | null)[];
    allergy: (string | null)[];
    notes?: string;
    tempType?: string;
    coolingType?: string;
}
interface HospitalInfo {
    name: string;
    department?: string;
    address?: string;
    phone?: string;
    logo?: string;
}

interface TemperatureChartConfig {
    patientName: string;
    patientAge?: string;
    patientGender?: string;
    inDate: string;
    outDate: string;
    diagnosis: string;
    department: string;
    bedNumber: string;
    medicalNumber: string;
    days: number;
}
/**
 * 生成默认的体温单数据
 * @param config 体温单配置参数
 * @returns 完整的患者数据对象
 */
declare const generateDefaultTemperatureChartData: (config: TemperatureChartConfig) => PatientData;
/**
 * 创建空的体温单数据结构
 * @param config 体温单配置参数
 * @returns 空的患者数据对象
 */
declare const createEmptyTemperatureChartData: (config: TemperatureChartConfig) => PatientData;

export { ClinicalTemplateEditor, NewTemplateModal, createEmptyTemperatureChartData, exportHtmlFromJson, generateDefaultTemperatureChartData };
export type { ChartConfig, ClinicalTemplateEditorRef, HospitalInfo, PatientData, TemperatureChartConfig };
