package auth

import (
	"fmt"
	"time"
)

func sendLoginCode(phone string) error {
	code, err := generateLoginCode()
	if err != nil {
		return err
	}
	err = db.Do(func(d *Data) error {
		if d == nil {
			d = &Data{}
		}
		if d.LoginCodes == nil {
			d.LoginCodes = map[string]map[string]bool{}
		}
		if d.LoginCodes[phone] == nil {
			d.LoginCodes[phone] = map[string]bool{}
		}
		d.LoginCodes[phone][code] = true
		return nil
	})
	if err != nil {
		return err
	}

	go func() {
		time.Sleep(5 * time.Minute)
		err = db.Do(func(d *Data) error {
			if d == nil {
				d = &Data{}
			}
			if d.LoginCodes == nil {
				d.LoginCodes = map[string]map[string]bool{}
			}
			if d.LoginCodes[phone] == nil {
				d.LoginCodes[phone] = map[string]bool{}
			}
			delete(d.LoginCodes[phone], code)
			return nil
		})
		if err != nil {
			logError(err)
		}
	}()

	msg := fmt.Sprintf("%s is your login code.", code)
	return smsClient.Send(phone, msg)
}
