import distutils, distutils.util
import msilib
import pathlib

import lokrez, lokrez.version

# -----------------------------------------------------------------------------
arch       = distutils.util.get_platform().split("-")[-1]

msi_filepath = pathlib.Path(
        "dist",
        "{}-{}-{}.msi" \
                .format(
                    lokrez.version.NAME,
                    lokrez.version.__version__.replace("dev", "1337"),
                    arch,
                    ),
                )

# -----------------------------------------------------------------------------
# Modifications to allow for a non-admin-required msi
print("modifying final msi '{}' for standard user installation" \
        .format(msi_filepath))
if not msi_filepath.exists():
    print("msi file does not exist")
else:
    try:
        db = msilib.OpenDatabase(
            str(msi_filepath),
            msilib.MSIDBOPEN_TRANSACT,
            ) 

        si = db.GetSummaryInformation(20)
        cur_wc = si.GetProperty(msilib.PID_WORDCOUNT)
        si.SetProperty(
            msilib.PID_WORDCOUNT,
            cur_wc | 0b1000,
            )
        si.SetProperty(
            msilib.PID_AUTHOR,
            "{} - {}" \
                    .format(
                        lokrez.version.ENTITY,
                        lokrez.version.AUTHOR,
                        ),
                    )
        si.Persist()

        # Install for the current user only
        vi = db.OpenView(
            "DELETE FROM `Property` WHERE `Property`.`Property` = 'ALLUSERS'"
            )
        vi.Execute(None)
        vi.Close()

        # Add the manufacturer name
        vi = db.OpenView(
            "UPDATE `Property` SET `Property`.`Value`='{} - {}' WHERE " \
            "`Property`.`Property` = 'Manufacturer'" \
            .format(
                lokrez.version.ENTITY,
                lokrez.version.AUTHOR,
                ),
            )
        vi.Execute(None)
        vi.Close()

        # Update Path env variable for the user only
        vi = db.OpenView(
                "UPDATE `Environment` SET `Environment`.`Name`='=-Path' " \
                "WHERE `Environment`.`Environment` = 'E_PATH'",
                )
        vi.Execute(None)
        vi.Close()

        db.Commit()
        db.Close()

    except Exception as e:
        print("fail")
        print(str(e))
        print(e.args)
        raise
