"""
Support for Credential Vault
"""

import ctypes
from ctypes.wintypes import DWORD, LPCWSTR, BOOL, LPWSTR, FILETIME

try:
	from ctypes.wintypes import LPBYTE
except ImportError:
	LPBYTE = ctypes.POINTER(ctypes.wintypes.BYTE)

class CredentialAttribute(ctypes.Structure):
	_fields_ = []

class Credential(ctypes.Structure):
	_fields_ = [
		('flags', DWORD),
		('type', DWORD),
		('target_name', LPWSTR),
		('comment', LPWSTR),
		('last_written', FILETIME),
		('credential_blob_size', DWORD),
		('credential_blob', LPBYTE),
		('persist', DWORD),
		('attribute_count', DWORD),
		('attributes', ctypes.POINTER(CredentialAttribute)),
		('target_alias', LPWSTR),
		('user_name', LPWSTR),
	]

	def __del__(self):
		ctypes.windll.advapi32.CredFree(ctypes.byref(self))

PCREDENTIAL = ctypes.POINTER(Credential)

CredRead = ctypes.windll.advapi32.CredReadW
CredRead.argtypes = (
	LPCWSTR, # TargetName
	DWORD, # Type
	DWORD, # Flags
	ctypes.POINTER(PCREDENTIAL), # Credential
)
CredRead.restype = BOOL

CredWrite = ctypes.windll.advapi32.CredWriteW
CredWrite.argtypes = (
	PCREDENTIAL, # Credential
	DWORD, # Flags
)
CredWrite.restype = BOOL

CredDelete = ctypes.windll.advapi32.CredDeleteW
CredDelete.argtypes = (
	LPCWSTR, # TargetName
	DWORD, # Type
	DWORD, # Flags
)
CredDelete.restype = BOOL
