package ldap

import (
	"net"
	"time"
)

func (ls *LDAPServer) Close(boundDN string, conn net.Conn) error {
	for _, p := range ls.providers {
		p.delayDeleteUserInfo(boundDN)
	}
	return nil
}

func (pi *ProviderInstance) delayDeleteUserInfo(dn string) {
	ticker := time.NewTicker(30 * time.Second)
	quit := make(chan struct{})
	go func() {
		for {
			select {
			case <-ticker.C:
				pi.boundUsersMutex.Lock()
				delete(pi.boundUsers, dn)
				pi.boundUsersMutex.Unlock()
				close(quit)
			case <-quit:
				ticker.Stop()
				return
			}
		}
	}()
}