# Copyright (C) 2023 - 2024 ANSYS, Inc. and/or its affiliates.
# SPDX-License-Identifier: MIT
#
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

from collections.abc import Iterable
from typing import List, Optional, Union

from _typeshed import Incomplete
from coilib50.process import IProcess as IProcess

from ansys.rocky.core._api_stubs.rocky30.plugins.api.ra_cfd_coupling import (
    RABaseCFDCoupling as RABaseCFDCoupling,
)
from ansys.rocky.core._api_stubs.rocky30.plugins.api.rocky_api_deprecated_decorator import (
    ApiDeprecated as ApiDeprecated,
)

class RAFluentOneWayCoupling(RABaseCFDCoupling):
    @classmethod
    def GetWrappedClass(self): ...
    @classmethod
    def GetClassName(self): ...
    def SetupStoreFiles(self, filename) -> None: ...
    def GetAvailableCoupledBoundaryNames(self) -> Iterable[str]: ...
    def CreateCoupledBoundaries(self, coupled_boundary_names: list[str]) -> None: ...
    def GetIsOneWayPeriodic(self) -> bool: ...
    def SetIsOneWayPeriodic(self, value: bool) -> None: ...
    def GetOverwriteCfdUpdateDistance(self) -> bool: ...
    def SetOverwriteCfdUpdateDistance(self, value: bool) -> None: ...
    def GetStartTime(self, unit: Optional[str] = ...) -> float: ...
    def SetStartTime(
        self, value: Union[str, float], unit: Optional[str] = ...
    ) -> None: ...
    def GetUseTurbulentDispersion(self) -> bool: ...
    def SetUseTurbulentDispersion(self, value: bool) -> None: ...
    def GetUserCfdUpdateDistance(self, unit: Optional[str] = ...) -> float: ...
    def SetUserCfdUpdateDistance(
        self, value: Union[str, float], unit: Optional[str] = ...
    ) -> None: ...

class RAFluentTwoWayCoupling(RABaseCFDCoupling):
    @classmethod
    def GetWrappedClass(self): ...
    @classmethod
    def GetClassName(self): ...
    def SetPartIdIfValid(self) -> None: ...
    def GetFluentReleases(self): ...
    @property
    def fluent_release(self): ...
    @fluent_release.setter
    def fluent_release(self, value) -> None: ...
    @property
    def fluent_phases(self): ...
    @fluent_phases.setter
    def fluent_phases(self, value) -> None: ...
    @property
    def fluent_rocky_phase(self): ...
    @fluent_rocky_phase.setter
    def fluent_rocky_phase(self, value) -> None: ...
    @property
    def fluent_solver_processes(self): ...
    @fluent_solver_processes.setter
    def fluent_solver_processes(self, value) -> None: ...
    @property
    def use_dat_initialization(self): ...
    @use_dat_initialization.setter
    def use_dat_initialization(self, value) -> None: ...
    @property
    def fluent_output_frequency_multiplier(self): ...
    @property
    def coupling_files_kept(self): ...
    @property
    def fluent_time_step(self): ...
    @property
    def additional_input_variables(self): ...
    @property
    def additional_output_variables(self): ...
    @property
    def disabled_input_variables(self): ...
    @disabled_input_variables.setter
    def disabled_input_variables(self, value) -> None: ...
    @property
    def disabled_output_variables(self): ...
    @disabled_output_variables.setter
    def disabled_output_variables(self, values) -> None: ...
    def SetupDatFilename(self, dat_filename): ...
    dat_filename: Incomplete
    cas_filename: Incomplete
    def StartFluent(self) -> None: ...
    def IsFluentRunning(self): ...
    def CloseFluent(self) -> None: ...
    def UpdateFluentInfo(self) -> None: ...
    def SetupStoreFiles(
        self, cas_filename, case_config: Incomplete | None = ...
    ) -> None: ...
    def GetFluentVersion(self): ...
    def SetFluentVersion(self, fluent_version) -> None: ...
    def GetMaximumVolumeFractionTarget(self): ...
    def SetMaximumVolumeFractionTarget(self, value) -> None: ...
    def GetAvailableCoupledBoundaryNames(self) -> Iterable[str]: ...
    def CreateCoupledBoundaries(self, coupled_boundary_names: list[str]) -> None: ...
    def GetAbsoluteValue(self, unit: Optional[str] = ...) -> float: ...
    def SetAbsoluteValue(
        self, value: Union[str, float], unit: Optional[str] = ...
    ) -> None: ...
    def GetMaximumIterations(self) -> int: ...
    def SetMaximumIterations(self, value: Union[str, int]) -> None: ...
    def GetMappingMethod(self) -> str: ...
    def SetMappingMethod(self, value: str) -> None: ...
    def GetValidMappingMethodValues(self) -> List[str]: ...
    def GetAveragingMethod(self) -> str: ...
    def SetAveragingMethod(self, value: str): ...
    def GetValidAveragingMethodValues(self) -> List[str]: ...
    def GetMinimumIterations(self) -> int: ...
    def SetMinimumIterations(self, value: Union[str, int]) -> None: ...
    def GetAveragingRadiusType(self) -> str: ...
    def SetAveragingRadiusType(self, value: str) -> None: ...
    def GetValidAveragingRadiusTypeValues(self) -> List[str]: ...
    def GetSolidsMaximumVolumeFractionTarget(self) -> float: ...
    def SetSolidsMaximumVolumeFractionTarget(self, value: Union[str, float]) -> None: ...
    def GetVolumeFractionTarget(self) -> float: ...
    def SetVolumeFractionTarget(self, value: float) -> None: ...
    def GetCouplingFilesKept(self) -> int: ...
    def SetCouplingFilesKept(self, value: Union[str, int]) -> None: ...
    def GetDecompositionFactor(self) -> float: ...
    def SetDecompositionFactor(self, value: Union[str, float]) -> None: ...
    def GetDiffusionCoefficient(self, unit: Optional[str] = ...) -> float: ...
    def SetDiffusionCoefficient(
        self, value: Union[str, float], unit: Optional[str] = ...
    ) -> None: ...
    def GetFluentAdditionalArgs(self) -> str: ...
    def SetFluentAdditionalArgs(self, value: str) -> None: ...
    def GetFluentExecutionMode(self) -> str: ...
    def SetFluentExecutionMode(self, value: str) -> None: ...
    def GetValidFluentExecutionModeValues(self) -> List[str]: ...
    def GetFluentOutputFrequencyMultiplier(self) -> int: ...
    def SetFluentOutputFrequencyMultiplier(self, value: Union[str, int]) -> None: ...
    def GetFluentSolverProcesses(self) -> int: ...
    def SetFluentSolverProcesses(self, value: Union[str, int]) -> None: ...
    def GetFractionParticleSize(self, unit: Optional[str] = ...) -> float: ...
    def SetFractionParticleSize(
        self, value: Union[str, float], unit: Optional[str] = ...
    ) -> None: ...
    def GetMaximumResidualTolerance(self) -> float: ...
    def SetMaximumResidualTolerance(self, value: Union[str, float]) -> None: ...
    def GetMaximumTimeSteps(self) -> int: ...
    def SetMaximumTimeSteps(self, value: Union[str, int]) -> None: ...
    def GetMinimumTimeSteps(self) -> int: ...
    def SetMinimumTimeSteps(self, value: Union[str, int]) -> None: ...
    def GetNumberOfSubsteps(self) -> int: ...
    def SetNumberOfSubsteps(self, value: Union[str, int]) -> None: ...
    def GetNumberOfThreads(self) -> int: ...
    def SetNumberOfThreads(self, value: Union[str, int]) -> None: ...
    def GetOverwriteCfdUpdateDistance(self) -> bool: ...
    def SetOverwriteCfdUpdateDistance(self, value: bool) -> None: ...
    def GetMaximumVolumeFraction(self, unit: Optional[str] = ...) -> float: ...
    def SetMaximumVolumeFraction(
        self, value: Union[str, float], unit: Optional[str] = ...
    ) -> None: ...
    def GetBackDiffusion(self) -> bool: ...
    def SetBackDiffusion(self, value: bool) -> None: ...
    def EnableBackDiffusion(self) -> None: ...
    def DisableBackDiffusion(self) -> None: ...
    def IsBackDiffusionEnabled(self) -> bool: ...
    def GetUseDatInitialization(self) -> bool: ...
    def SetUseDatInitialization(self, value: bool) -> None: ...
    def GetSubstepping(self) -> bool: ...
    def SetSubstepping(self, value: bool) -> None: ...
    def EnableSubstepping(self) -> None: ...
    def DisableSubstepping(self) -> None: ...
    def IsSubsteppingEnabled(self) -> bool: ...
    def GetUseTurbulentDispersion(self) -> bool: ...
    def SetUseTurbulentDispersion(self, value: bool) -> None: ...
    def GetUserCfdUpdateDistance(self, unit: Optional[str] = ...) -> float: ...
    def SetUserCfdUpdateDistance(
        self, value: Union[str, float], unit: Optional[str] = ...
    ) -> None: ...
