package wt

import (
	"net"
	"time"

	wt "github.com/quic-go/webtransport-go"
)

type conn struct {
	session *wt.Session
	stream  *wt.Stream
	srcAddr net.Addr
}

func Conn(session *wt.Session, stream *wt.Stream) net.Conn {
	return &conn{
		session: session,
		stream:  stream,
	}
}

func ConnWithSrcAddr(session *wt.Session, stream *wt.Stream, srcAddr net.Addr) net.Conn {
	return &conn{
		session: session,
		stream:  stream,
		srcAddr: srcAddr,
	}
}

func (c *conn) Read(b []byte) (n int, err error) {
	return c.stream.Read(b)
}

func (c *conn) Write(b []byte) (n int, err error) {
	return c.stream.Write(b)
}

func (c *conn) Close() error {
	return c.stream.Close()
}

func (c *conn) LocalAddr() net.Addr {
	return c.session.LocalAddr()
}

func (c *conn) RemoteAddr() net.Addr {
	return c.session.RemoteAddr()
}

func (c *conn) SrcAddr() net.Addr {
	return c.srcAddr
}

func (c *conn) SetDeadline(t time.Time) error {
	return c.stream.SetDeadline(t)
}

func (c *conn) SetReadDeadline(t time.Time) error {
	return c.stream.SetReadDeadline(t)
}

func (c *conn) SetWriteDeadline(t time.Time) error {
	return c.stream.SetWriteDeadline(t)
}
