/**
 * @module meteoJS/sounding/parcel
 */
import Unique from '../base/Unique.js';

/**
 * Options for the constructor.
 * 
 * @typedef {Object} module:meteoJS/sounding/parcel~options
 * @param {undefined|number} [pres=undefined]
 *   Parcel beginning pressure (mb).
 * @param {undefined|number} [tmpc=undefined]
 *   Parcel beginning temperature (C).
 * @param {undefined|number} [dwpc=undefined]
 *   Parcel beginning dewpoint (C).
 * @param {undefined|number} [ptrace=undefined]
 *   Parcel trace pressure (mb).
 * @param {undefined|number} [ttrace=undefined]
 *   Parcel trace temperature (C).
 * @param {undefined|number} [blayer=undefined]
 *   Pressure of the bottom of the layer the parcel is lifted (mb).
 * @param {undefined|number} [tlayer=undefined]
 *   Pressure of the top of the layer the parcel is lifted (mb).
 * @param {undefined|number} [lclpres=undefined]
 *   Parcel LCL (lifted condensation level) pressure (mb).
 * @param {undefined|number} [lclhght=undefined]
 *   Parcel LCL height (m AGL).
 * @param {undefined|number} [lfcpres=undefined]
 *   Parcel LFC (level of free convection) pressure (mb).
 * @param {undefined|number} [lfchght=undefined]
 *   Parcel LFC height (m AGL).
 * @param {undefined|number} [elpres=undefined]
 *   Parcel EL (equilibrium level) pressure (mb).
 * @param {undefined|number} [elhght=undefined]
 *   Parcel EL height (m AGL).
 * @param {undefined|number} [mplpres=undefined]
 *   Maximum Parcel Level (mb).
 * @param {undefined|number} [mplhght=undefined]
 *   Maximum Parcel Level (m AGL).
 * @param {undefined|number} [bplus=undefined]
 *   Parcel CAPE (J/kg).
 * @param {undefined|number} [bminus=undefined]
 *   Parcel CIN (J/kg).
 * @param {undefined|number} [bfzl=undefined]
 *   Parcel CAPE up to freezing level (J/kg).
 * @param {undefined|number} [b3km=undefined]
 *   Parcel CAPE up to 3 km (J/kg).
 * @param {undefined|number} [b6km=undefined]
 *   Parcel CAPE up to 6 km (J/kg).
 * @param {undefined|number} [p0c=undefined]
 *   Pressure value at 0 C  (mb).
 * @param {undefined|number} [pm10c=undefined]
 *   Pressure value at -10 C (mb).
 * @param {undefined|number} [pm20c=undefined]
 *   Pressure value at -20 C (mb).
 * @param {undefined|number} [pm30c=undefined]
 *   Pressure value at -30 C (mb).
 * @param {undefined|number} [hght0c=undefined]
 *   Height value at 0 C (m AGL).
 * @param {undefined|number} [hghtm10c=undefined]
 *   Height value at -10 C (m AGL).
 * @param {undefined|number} [hghtm20c=undefined]
 *   Height value at -20 C (m AGL).
 * @param {undefined|number} [hghtm30c=undefined]
 *   Height value at -30 C (m AGL).
 * @param {undefined|number} [wm10c=undefined]
 *   Wet bulb velocity at -10 C.
 * @param {undefined|number} [wm20c=undefined]
 *   Wet bulb velocity at -20 C.
 * @param {undefined|number} [wm30c=undefined]
 *   Wet bulb at -30 C.
 * @param {undefined|number} [li5=undefined]
 *   Lifted Index at 500 mb (C).
 * @param {undefined|number} [li3=undefined]
 *   Lifted Index at 300 mb (C).
 * @param {undefined|number} [brnshear=undefined]
 *   Bulk Richardson Number Shear.
 * @param {undefined|number} [brnu=undefined]
 *   Bulk Richardson Number U (kts).
 * @param {undefined|number} [brnv=undefined]
 *   Bulk Richardson Number V (kts).
 * @param {undefined|number} [brn=undefined]
 *   Bulk Richardson Number (unitless).
 * @param {undefined|number} [limax=undefined]
 *   Maximum Lifted Index (C).
 * @param {undefined|number} [limaxpres=undefined]
 *   Pressure at Maximum Lifted Index (mb).
 * @param {undefined|number} [cap=undefined]
 *   Cap Strength (C).
 * @param {undefined|number} [cappres=undefined]
 *   Cap strength pressure (mb).
 * @param {undefined|number} [bmin=undefined]
 *   Buoyancy minimum in profile (C).
 * @param {undefined|number} [bminpres=undefined]
 *   Buoyancy minimum pressure (mb).
 */

/**
 * Class representing a parcel lifting.
 * 
 * @extends module:meteoJS/base/unique.Unique
 */
export class Parcel extends Unique {
  
  /**
   * @param {module:meteoJS/sounding/parcel~options} [options] - Options.
   */
  constructor({
    id = undefined,
    pres = undefined,
    tmpc = undefined,
    dwpc = undefined,
    ptrace = undefined,
    ttrace = undefined,
    blayer = undefined,
    tlayer = undefined,
    lclpres = undefined,
    lclhght = undefined,
    lfcpres = undefined,
    lfchght = undefined,
    elpres = undefined,
    elhght = undefined,
    mplpres = undefined,
    mplhght = undefined,
    bplus = undefined,
    bminus = undefined,
    bfzl = undefined,
    b3km = undefined,
    b6km = undefined,
    p0c = undefined,
    pm10c = undefined,
    pm20c = undefined,
    pm30c = undefined,
    hght0c = undefined,
    hghtm10c = undefined,
    hghtm20c = undefined,
    hghtm30c = undefined,
    wm10c = undefined,
    wm20c = undefined,
    wm30c = undefined,
    li5 = undefined,
    li3 = undefined,
    brnshear = undefined,
    brnu = undefined,
    brnv = undefined,
    limax = undefined,
    limaxpres = undefined,
    cap = undefined,
    cappres = undefined,
    bmin = undefined,
    bminpres = undefined
  } = {}) {
    super({ id });
    
    /**
     * @type undefined|number
     * @public
     */
    this.pres = pres;
    
    /**
     * @type undefined|number
     * @public
     */
    this.tmpc = tmpc;
    
    /**
     * @type undefined|number
     * @public
     */
    this.dwpc = dwpc;
    
    /**
     * @type undefined|number
     * @public
     */
    this.ptrace = ptrace;
    
    /**
     * @type undefined|number
     * @public
     */
    this.ttrace = ttrace;
    
    /**
     * @type undefined|number
     * @public
     */
    this.blayer = blayer;
    
    /**
     * @type undefined|number
     * @public
     */
    this.tlayer = tlayer;
    
    /**
     * @type undefined|number
     * @public
     */
    this.lclpres = lclpres;
    
    /**
     * @type undefined|number
     * @public
     */
    this.lclhght = lclhght;
    
    /**
     * @type undefined|number
     * @public
     */
    this.lfcpres = lfcpres;
    
    /**
     * @type undefined|number
     * @public
     */
    this.lfchght = lfchght;
    
    /**
     * @type undefined|number
     * @public
     */
    this.elpres = elpres;
    
    /**
     * @type undefined|number
     * @public
     */
    this.elhght = elhght;
    
    /**
     * @type undefined|number
     * @public
     */
    this.mplpres = mplpres;
    
    /**
     * @type undefined|number
     * @public
     */
    this.mplhght = mplhght;
    
    /**
     * @type undefined|number
     * @public
     */
    this.bplus = bplus;
    
    /**
     * @type undefined|number
     * @public
     */
    this.bminus = bminus;
    
    /**
     * @type undefined|number
     * @public
     */
    this.bfzl = bfzl;
    
    /**
     * @type undefined|number
     * @public
     */
    this.b3km = b3km;
    
    /**
     * @type undefined|number
     * @public
     */
    this.b6km = b6km;
    
    /**
     * @type undefined|number
     * @public
     */
    this.p0c = p0c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.pm10c = pm10c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.pm20c = pm20c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.pm30c = pm30c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.hght0c = hght0c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.hghtm10c = hghtm10c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.hghtm20c = hghtm20c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.hghtm30c = hghtm30c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.wm10c = wm10c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.wm20c = wm20c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.wm30c = wm30c;
    
    /**
     * @type undefined|number
     * @public
     */
    this.li5 = li5;
    
    /**
     * @type undefined|number
     * @public
     */
    this.li3 = li3;
    
    /**
     * @type undefined|number
     * @public
     */
    this.brnshear = brnshear;
    
    /**
     * @type undefined|number
     * @public
     */
    this.brnu = brnu;
    
    /**
     * @type undefined|number
     * @public
     */
    this.brnv = brnv;
    
    /**
     * @type undefined|number
     * @public
     */
    this.limax = limax;
    
    /**
     * @type undefined|number
     * @public
     */
    this.limaxpres = limaxpres;
    
    /**
     * @type undefined|number
     * @public
     */
    this.cap = cap;
    
    /**
     * @type undefined|number
     * @public
     */
    this.cappres = cappres;
    
    /**
     * @type undefined|number
     * @public
     */
    this.bmin = bmin;
    
    /**
     * @type undefined|number
     * @public
     */
    this.bminpres = bminpres;
  }
}
export default Parcel;