r"""jc - JSON Convert `csv` implicit header file parser

The `csv` implicit header parser will attempt to automatically detect the
delimiter character. If the delimiter cannot be detected it will default to
comma. The file must have no header, and the field names will be generated
as "c0", "c1", etc.

Usage (cli):

    $ cat file.csv | jc --csv-ih

Usage (module):

    import jc
    result = jc.parse('csv_ih', csv_output)

Schema:

CSV file converted to a Dictionary:
https://docs.python.org/3/library/csv.html

    [
      {
        "column_name1":     string,
        "column_name2":     string
      }
    ]

Examples:

    $ cat homes.csv
    142, 160, 28, 10, 5, 3,  60, 0.28,  3167
    175, 180, 18,  8, 4, 1,  12, 0.43,  4033
    129, 132, 13,  6, 3, 1,  41, 0.33,  1471
    ...

    $ cat homes.csv | jc --csv-ih -p
    [
      {
        "c0": "142",
        "c1": "160",
        "c2": "28",
        "c3": "10",
        "c4": "5",
        "c5": "3",
        "c6": "60",
        "c7": "0.28",
        "c8": "3167"
      },
      {
        "c0": "175",
        "c1": "180",
        "c2": "18",
        "c3": "8",
        "c4": "4",
        "c5": "1",
        "c6": "12",
        "c7": "0.43",
        "c8": "4033"
      },
      {
        "c0": "129",
        "c1": "132",
        "c2": "13",
        "c3": "6",
        "c4": "3",
        "c5": "1",
        "c6": "41",
        "c7": "0.33",
        "c8": "1471"
      },
      ...
    ]
"""
from typing import List, Union
from jc.jc_types import JSONDictType
import jc.parsers.csv as jc_csv
import jc.utils


class info():
    """Provides parser metadata (version, author, etc.)"""
    version = '1.0'
    description = 'CSV implicit header file parser'
    author = 'Gary Gurlaskie'
    author_email = 'https://github.com/garyg1'
    details = 'Using the python standard csv library'
    compatible = ['linux', 'darwin', 'cygwin', 'win32', 'aix', 'freebsd']
    tags = ['standard', 'file', 'string']


__version__ = info.version

def parse(
    data: Union[str, bytes],
    raw: bool = False,
    quiet: bool = False
) -> List[JSONDictType]:
    """
    Main text parsing function

    Parameters:

        data:        (string)  text data to parse
        raw:         (boolean) unprocessed output if True
        quiet:       (boolean) suppress warning messages if True

    Returns:

        List of Dictionaries. Raw or processed structured data.
    """
    jc.utils.compatibility(__name__, info.compatible, quiet)
    jc.utils.input_type_check(data)
    return jc_csv.parse(data, raw, quiet, implicit_header=True)