import { Bundle } from 'fhir/r5.js';
import { CSSResult } from 'lit';
import { LitElement } from 'lit';
import { Medication } from 'fhir/r5';
import { MedicationRequest } from 'fhir/r5';
import { TemplateResult } from 'lit-html';

declare interface ButtonsPreferences {
    changeProduct: SectionPreferences;
}

declare interface DosageInstructionFormValues {
    dose: {
        min: number | null;
        max: number | null;
        intakeUnit: {
            value: string;
            label: string;
        } | null;
    };
    timing: {
        ma: boolean;
        mi: boolean;
        ap: boolean;
        so: boolean;
        co: boolean;
        nu: boolean;
    };
    frequency: {
        min: number | null;
        max: number | null;
        every: number | null;
        periodUnit: {
            value: string;
            label: string;
        } | null;
    };
    duration: {
        min: number | null;
        max: number | null;
        periodUnit: {
            value: string;
            label: string;
        } | null;
    };
    maximum: {
        value: number | null;
        intakeUnit: {
            value: string;
            label: string;
        } | null;
        periodUnit: {
            value: string;
            label: string;
        } | null;
    };
    dayOfWeek: {
        mon: boolean;
        tue: boolean;
        wed: boolean;
        thu: boolean;
        fri: boolean;
        sat: boolean;
        sun: boolean;
    };
}

declare interface FormPreferences {
    maximumDosage: SectionPreferences;
}

/**
 * Interface pour représenter un médicament extrait d'un Bundle FHIR
 */
declare interface MedicationInfo {
    medication: Medication;
    medicationRequest: MedicationRequest | null;
    idPrescription: string;
}

export declare class MedicationRequestEditor extends LitElement {
    medication: MedicationInfo | null;
    patientProfile: Bundle | null;
    apiUrl: string;
    apiKey: string | undefined;
    actionsVisibility: boolean;
    preferences: UserPreferences;
    selectHeader: {
        value: string;
        label: string;
    };
    formValues: DosageInstructionFormValues;
    usualPosologiesOptions: Array<{
        value: string;
        label: string;
        subText?: string;
        category?: string;
        categoryColor?: string;
        categoryPosition?: string;
    }>;
    selectedPosology: MedicationRequest | null;
    selectedDosageIndex: number;
    private listUsualPosologies;
    private intakeUnits;
    private fieldErrors;
    private touchedFields;
    private frequencyUnitSelect;
    private showHeaderSelectSlot;
    updated(changedProperties: Map<string, unknown>): void;
    private get customPosology();
    private getSelectedDosage;
    private getAdditionalInstructionText;
    private setMedicationRequest;
    private updateCustomPosology;
    private runValidation;
    private resetValidation;
    private handleFieldBlur;
    private fieldClass;
    private focusFirstError;
    private renderSectionMessages;
    private getMedicationRequestById;
    private handleDosageInstructionClick;
    private setSelectedPosologyAndDosage;
    private handlePosologyChange;
    validateEdition(): void;
    private patchFormSection;
    private convertIfNeeded;
    private handleDoseIntakeUnitChange;
    private handleMaximumIntakeUnitChange;
    private handleTimingCheckboxChange;
    private handleCompoundCheckboxChange;
    private handleFrequencyPeriodUnitChange;
    private handleDayOfWeekCheckboxChange;
    private isExactTimingSelection;
    private get isMsActive();
    private get isMmsActive();
    private patchNumberField;
    private handleFrequencyFieldChange;
    private getIntakeUnitStep;
    private get intakeUnitOptions();
    private handleCommentPosologyChange;
    private handleCommentDosageChange;
    private get posologySelectOptions();
    private get activePosologyOption();
    private getBasicPosologies;
    private getUsualPosologiesOptions;
    closeModal(): void;
    changeProductClicked(): void;
    private renderDosageViewers;
    private renderPosologyPanel;
    private renderFormPanel;
    render(): TemplateResult<1>;
    static styles: CSSResult;
}

declare interface SectionPreferences {
    display: boolean;
}

declare interface UserPreferences {
    form: FormPreferences;
    buttons?: ButtonsPreferences;
}

export { }
