package clientfake

import (
	"context"
	"net"
	"time"
)

type fakeConn struct{}

func (c fakeConn) Close() error {
	return nil
}

func (c fakeConn) Read(b []byte) (n int, err error) {
	return 0, nil
}

func (c fakeConn) Write(b []byte) (n int, err error) {
	return 0, nil
}

func (c fakeConn) LocalAddr() net.Addr {
	return nil
}

func (c fakeConn) RemoteAddr() net.Addr {
	return nil
}

func (c fakeConn) SetDeadline(t time.Time) error {
	return nil
}

func (c fakeConn) SetReadDeadline(t time.Time) error {
	return nil
}

func (c fakeConn) SetWriteDeadline(t time.Time) error {
	return nil
}

type FuncFailDialer func(context.Context) error

func (f FuncFailDialer) Dial(net, addr string) (net.Conn, error) {
	return &fakeConn{}, f(context.Background())
}

func (f FuncFailDialer) DialContext(ctx context.Context, net, addr string) (net.Conn, error) {
	return &fakeConn{}, f(ctx)
}
