"""Auto-generated type stub for IDFDocument (EnergyPlus 25.2.0).

DO NOT EDIT — regenerate with:
    python -m idfkit.codegen.generate_stubs 25.2.0
"""

from __future__ import annotations

from collections.abc import Iterator
from pathlib import Path
from typing import Any, Generic, TypeVar

from ._compat import EppyDocumentMixin
from ._generated_types import *  # noqa: F403
from ._generated_types import _ObjectTypeMap
from .cst import DocumentCST
from .introspection import ObjectDescription
from .objects import IDFCollection, IDFObject
from .references import ReferenceGraph
from .schema import EpJSONSchema
from .simulation.config import EnergyPlusConfig

Strict = TypeVar("Strict", bound=bool, default=bool, covariant=True)

_PYTHON_TO_IDF: dict[str, str]
_IDF_TO_PYTHON: dict[str, str]

class IDFDocument(_ObjectTypeMap, EppyDocumentMixin, Generic[Strict]):  # type: ignore[misc]
    version: tuple[int, int, int]
    filepath: Path | None

    def __init__(
        self,
        version: tuple[int, int, int] | None = ...,
        schema: EpJSONSchema | None = ...,
        filepath: Path | str | None = ...,
        *,
        strict: Strict = ...,
    ) -> None: ...
    @property
    def strict(self) -> Strict: ...
    @property
    def schema(self) -> EpJSONSchema | None: ...
    @property
    def cst(self) -> DocumentCST | None: ...
    @property
    def raw_text(self) -> str | None: ...
    @property
    def collections(self) -> dict[str, IDFCollection[IDFObject]]: ...
    @property
    def references(self) -> ReferenceGraph: ...
    def get_collection(self, obj_type: str) -> IDFCollection[IDFObject]: ...
    def __getattr__(self, name: str) -> IDFCollection[IDFObject]: ...
    def __contains__(self, obj_type: str) -> bool: ...  # type: ignore[override]
    def __iter__(self) -> Iterator[str]: ...  # type: ignore[override]
    def __len__(self) -> int: ...
    def keys(self) -> list[str]: ...  # type: ignore[override]
    def values(self) -> list[IDFCollection[IDFObject]]: ...  # type: ignore[override]
    def items(self) -> list[tuple[str, IDFCollection[IDFObject]]]: ...  # type: ignore[override]
    def describe(self, obj_type: str) -> ObjectDescription: ...
    def add(
        self, obj_type: str, name: str = ..., data: dict[str, Any] | None = ..., *, validate: bool = ..., **kwargs: Any
    ) -> IDFObject: ...
    def removeidfobject(self, obj: IDFObject) -> None: ...
    def rename(self, obj_type: str, old_name: str, new_name: str) -> None: ...
    def notify_name_change(self, obj: IDFObject, old_name: str, new_name: str) -> None: ...
    def notify_reference_change(self, obj: IDFObject, field_name: str, old_value: Any, new_value: Any) -> None: ...
    def get_referencing(self, name: str) -> set[IDFObject]: ...
    def get_references(self, obj: IDFObject) -> set[str]: ...
    @property
    def schedules_dict(self) -> dict[str, IDFObject]: ...
    def get_schedule(self, name: str) -> IDFObject | None: ...
    def get_used_schedules(self) -> set[str]: ...
    def get_zone_surfaces(self, zone_name: str) -> list[IDFObject]: ...
    @property
    def all_objects(self) -> Iterator[IDFObject]: ...
    def objects_by_type(self) -> Iterator[tuple[str, IDFCollection[IDFObject]]]: ...
    def expand(self, *, energyplus: EnergyPlusConfig | None = ..., timeout: float = ...) -> IDFDocument[Strict]: ...
    def copy(self) -> IDFDocument[Strict]: ...
    @property
    def zones(self) -> IDFCollection[Zone]: ...
    @property
    def materials(self) -> IDFCollection[Material]: ...
    @property
    def material_nomass(self) -> IDFCollection[MaterialNoMass]: ...
    @property
    def material_airgap(self) -> IDFCollection[MaterialAirGap]: ...
    @property
    def constructions(self) -> IDFCollection[Construction]: ...
    @property
    def building_surfaces(self) -> IDFCollection[BuildingSurfaceDetailed]: ...
    @property
    def fenestration_surfaces(self) -> IDFCollection[FenestrationSurfaceDetailed]: ...
    @property
    def internal_mass(self) -> IDFCollection[InternalMass]: ...
    @property
    def shading_surfaces(self) -> IDFCollection[ShadingSiteDetailed]: ...
    @property
    def shading_building(self) -> IDFCollection[ShadingBuildingDetailed]: ...
    @property
    def shading_zone(self) -> IDFCollection[ShadingZoneDetailed]: ...
    @property
    def schedules_compact(self) -> IDFCollection[ScheduleCompact]: ...
    @property
    def schedules_constant(self) -> IDFCollection[ScheduleConstant]: ...
    @property
    def schedules_file(self) -> IDFCollection[ScheduleFile]: ...
    @property
    def schedules_year(self) -> IDFCollection[ScheduleYear]: ...
    @property
    def schedules_week_daily(self) -> IDFCollection[ScheduleWeekDaily]: ...
    @property
    def schedules_day_interval(self) -> IDFCollection[ScheduleDayInterval]: ...
    @property
    def schedules_day_hourly(self) -> IDFCollection[ScheduleDayHourly]: ...
    @property
    def schedules_day_list(self) -> IDFCollection[ScheduleDayList]: ...
    @property
    def schedule_type_limits(self) -> IDFCollection[ScheduleTypeLimits]: ...
    @property
    def people(self) -> IDFCollection[People]: ...
    @property
    def lights(self) -> IDFCollection[Lights]: ...
    @property
    def electric_equipment(self) -> IDFCollection[ElectricEquipment]: ...
    @property
    def gas_equipment(self) -> IDFCollection[GasEquipment]: ...
    @property
    def hot_water_equipment(self) -> IDFCollection[HotWaterEquipment]: ...
    @property
    def infiltration(self) -> IDFCollection[ZoneInfiltrationDesignFlowRate]: ...
    @property
    def ventilation(self) -> IDFCollection[ZoneVentilationDesignFlowRate]: ...
    @property
    def thermostats(self) -> IDFCollection[ThermostatSetpointDualSetpoint]: ...
    @property
    def hvac_templates(self) -> IDFCollection[HVACTemplateZoneIdealLoadsAirSystem]: ...
    @property
    def ideal_loads(self) -> IDFCollection[ZoneHVACIdealLoadsAirSystem]: ...
    @property
    def sizing_zone(self) -> IDFCollection[SizingZone]: ...
    @property
    def sizing_system(self) -> IDFCollection[SizingSystem]: ...
    @property
    def output_variables(self) -> IDFCollection[OutputVariable]: ...
    @property
    def output_meters(self) -> IDFCollection[OutputMeter]: ...
    @property
    def output_table_summary(self) -> IDFCollection[OutputTableSummaryReports]: ...
    @property
    def simulation_control(self) -> IDFCollection[SimulationControl]: ...
    @property
    def run_period(self) -> IDFCollection[RunPeriod]: ...
    @property
    def building(self) -> IDFCollection[Building]: ...
    @property
    def global_geometry_rules(self) -> IDFCollection[GlobalGeometryRules]: ...
    @property
    def site_location(self) -> IDFCollection[SiteLocation]: ...
    @property
    def sizing_parameters(self) -> IDFCollection[SizingParameters]: ...
    @property
    def timestep(self) -> IDFCollection[Timestep]: ...
    @property
    def window_material_simple(self) -> IDFCollection[WindowMaterialSimpleGlazingSystem]: ...
    @property
    def window_material_glazing(self) -> IDFCollection[WindowMaterialGlazing]: ...
    @property
    def window_material_gas(self) -> IDFCollection[WindowMaterialGas]: ...
    @property
    def construction_window(self) -> IDFCollection[Construction]: ...
