#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Copyright 2020 The SkyWater PDK Authors.
#
# Use of this source code is governed by the Apache 2.0
# license that can be found in the LICENSE file or at
# https://www.apache.org/licenses/LICENSE-2.0
#
# SPDX-License-Identifier: Apache-2.0


VERILOG_BASE = [
    "full.v",
]

VERILOG_GENERATED = [
    "blackbox.v",
    "simple.v",
]

LIBERTY_BASE = [
    "wrap.lib",
]
LIBERTY_GENERATED = [
    "cell.lib",
]




def src_filename(filename):
    """Returns the source file for a generated file.

    >>> src_filename("")

    """
    if '.' in filename:
        basename, extension = filename.split('.', 1)
    else:
        basename = filename
        extension = ''

    if extension.endswith(".v"):
        if extension in VERILOG_BASE:
            raise TypeError(
                "File type {} (from file {}) is not generated!".format(
                    extension, filename))
        elif extension not in VERILOG_GENERATED:
            raise NameError(
                "Unknown file type {} for file {}".format(
                    extension, filename))
        return "{}.{}".format(basename, "full.v")

    elif extension.endswith(".lib"):
        if extension not in LIBERTY_BASE:
            raise TypeError(
                "File type {} (from file {}) is not generated!".format(
                    extension, filename))
        elif extension not in LIBERTY_GENERATED:
            raise NameError(
                "Unknown file type {} for file {}".format(
                    extension, filename))
        return "{}.{}".format(basename, ".json")


def is_generated(filename):
    """Determines if a file is generated from another source.

    >>> is_generated("")

    """

    if '.' in filename:
        basename, extension = filename.split('.', 1)
    else:
        basename = filename
        extension = ''

    if extension.endswith(".v"):
        if extension in VERILOG_BASE:
            return False
        elif extension in VERILOG_GENERATED:
            return True
        else:
            raise NameError(
                "Unknown file type {} for file {}".format(
                    extension, filename))

    if extension.endswith(".lib"):
        if extension in LIBERTY_BASE:
            return False
        elif extension in LIBERTY_GENERATED:
            return True

    if extension.endswith(".json"):
        return True
    if f.endswith(".png"):
        return True
    if f in ('README.rst',):
        return True
    return False


if __name__ == "__main__":
    import doctest
    doctest.testmod()
