# autogenerated file, do not modify

from os import PathLike, curdir
from typing import Union

from flopy.mf6.data.mfdatautil import ArrayTemplateGenerator, ListTemplateGenerator
from flopy.mf6.mfpackage import MFChildPackages, MFPackage


class ModflowUtllaktab(MFPackage):
    """
    ModflowUtllaktab defines a LAKTAB package.

    Parameters
    ----------
    model
        Model that this package is a part of. Package is automatically
        added to model when it is initialized.
    loading_package : bool, default False
        Do not set this parameter. It is intended for debugging and internal
        processing purposes only.
    nrow : integer
        integer value specifying the number of rows in the lake table. there must be
        nrow rows of data in the table block.
    ncol : integer
        integer value specifying the number of columns in the lake table. there must be
        ncol columns of data in the table block. for lakes with horizontal and/or
        vertical ctype connections, ncol must be equal to 3. for lakes with embeddedh
        or embeddedv ctype connections, ncol must be equal to 4.
    table : [(stage, volume, sarea, barea)]
        * stage : double precision
                real value that defines the stage corresponding to the remaining data on the
                line.
        * volume : double precision
                real value that defines the lake volume corresponding to the stage specified on
                the line.
        * sarea : double precision
                real value that defines the lake surface area corresponding to the stage
                specified on the line.
        * barea : double precision
                real value that defines the lake-GWF exchange area corresponding to the stage
                specified on the line. BAREA is only specified if the CLAKTYPE for the lake is
                EMBEDDEDH or EMBEDDEDV.


    filename : str or PathLike, optional
        Name or path of file where this package is stored.
    pname : str, optional
        Package name.
    **kwargs
        Extra keywords for :class:`flopy.mf6.mfpackage.MFPackage`.

    """

    table = ListTemplateGenerator(("laktab", "table", "table"))
    package_abbr = "utllaktab"
    _package_type = "laktab"
    dfn_file_name = "utl-laktab.dfn"
    dfn = [
        ["header", "multi-package"],
        [
            "block dimensions",
            "name nrow",
            "type integer",
            "reader urword",
            "optional false",
        ],
        [
            "block dimensions",
            "name ncol",
            "type integer",
            "reader urword",
            "optional false",
        ],
        [
            "block table",
            "name table",
            "type recarray stage volume sarea barea",
            "shape (nrow)",
            "reader urword",
        ],
        [
            "block table",
            "name stage",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block table",
            "name volume",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block table",
            "name sarea",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
        ],
        [
            "block table",
            "name barea",
            "type double precision",
            "shape",
            "tagged false",
            "in_record true",
            "reader urword",
            "optional true",
        ],
    ]

    def __init__(
        self,
        model,
        loading_package=False,
        nrow=None,
        ncol=None,
        table=None,
        filename=None,
        pname=None,
        **kwargs,
    ):
        """Initialize ModflowUtllaktab."""
        super().__init__(
            parent=model,
            package_type="laktab",
            filename=filename,
            pname=pname,
            loading_package=loading_package,
            **kwargs,
        )

        self.nrow = self.build_mfdata("nrow", nrow)
        self.ncol = self.build_mfdata("ncol", ncol)
        self.table = self.build_mfdata("table", table)

        self._init_complete = True
