using System;

namespace HydraulicSimulator.Models
{
    /// <summary>
    /// Representa un fluido con sus propiedades físicas
    /// </summary>
    public class Fluid
    {
        public double Rho { get; set; } = 998.0; // kg/m³ - densidad
        public double Mu { get; set; } = 1.0e-3; // Pa*s - viscosidad dinámica
        public string Name { get; set; } = "Water"; // nombre del fluido
        public double Temp { get; set; } = 20.0; // °C - temperatura
        public double PVapor { get; set; } = 2337.0; // Pa - presión de vapor a 20°C

        public Fluid(double rho = 998.0, double mu = 1.0e-3, string name = "Water", 
                     double temp = 20.0, double pVapor = 2337.0)
        {
            Rho = rho;
            Mu = mu;
            Name = name;
            Temp = temp;
            PVapor = pVapor;
        }

        /// <summary>
        /// Viscosidad cinemática (m²/s)
        /// </summary>
        public double Nu => Mu / Rho;

        /// <summary>
        /// Verifica si hay cavitación
        /// </summary>
        public bool IsCavitating(double pAbs) => pAbs < PVapor;

        // Fluidos predefinidos
        public static Fluid Water20C => new Fluid(998.0, 1.0e-3, "Water_20C", 20.0);
        public static Fluid Water60C => new Fluid(983.0, 4.66e-4, "Water_60C", 60.0);
        public static Fluid OilSAE30 => new Fluid(876.0, 0.1, "Oil_SAE30", 20.0);
    }
}
