import argparse
import os

import fontforge
from fontTools.ttLib import TTFont


def postProcess(args):
    font = TTFont(args.output)

    os2 = font["OS/2"]
    # FontForge sets this to ord(' ') for OTF fonts, 0 for TTF fonts, we want
    # to keep things consistent.
    os2.usDefaultChar = 0

    # Filter-out useless Macintosh names
    font["name"].names = [n for n in font["name"].names if n.platformID != 1]

    # https://github.com/fontforge/fontforge/pull/3235
    # fontDirectionHint is deprecated and must be set to 2
    font["head"].fontDirectionHint = 2
    # unset bits 6..10
    font["head"].flags &= ~0x7e0

    # Drop useless table with timestamp
    if "FFTM" in font:
        del font["FFTM"]

    font.save(args.output)


def makeFont(args):
    font = fontforge.open(args.input)

    for glyph in font.glyphs():
        glyph.unlinkRmOvrlpSave = True

    if args.features:
        font.mergeFeature(args.features)

    if os.environ.get("SOURCE_DATE_EPOCH") is None:
        os.environ["SOURCE_DATE_EPOCH"] = "0"

    font.appendSFNTName("English (US)", "UniqueID", "%s;%s;%s" % (args.version,
        font.os2_vendor, font.fontname))

    font.version = args.version
    font.generate(args.output, flags=("round", "opentype"))

    postProcess(args)


def main():
    parser = argparse.ArgumentParser(description="Create web fonts.")
    parser.add_argument("input", help="input font file name")
    parser.add_argument("output", help="output font file name")
    parser.add_argument("--version", help="font version", required=True)
    parser.add_argument("--features", help="font features file name")

    args = parser.parse_args()

    makeFont(args)

if __name__ == "__main__":
    main()