package ftp

import (
	"bufio"
	"fmt"
	"net"
	"strings"
)

type Conn struct {
	conn net.Conn
	dataType dataType
	dataPort *dataPort
	rootDir string
	workDir string
}

func NewConn(conn net.Conn, rootDir string) *Conn {
	return &Conn{
		conn: conn,
		rootDir: rootDir,
		workDir: "/",
	}
}

func Serve (c *Conn) {
	c.respond(status220)

	s := bufio.NewScanner(c.conn)
	for s.Scan() {
		input := strings.Fields(s.Text())
		if len(input) == 0 {
			continue
		}
		command, args := input[0], input[1:]
		fmt.Printf("<< %s %v", command, args)

		switch command {
		case "CWD": // cd
			c.cwd(args)
		case "LIST": // ls
			c.list(args)
		case "PORT":
			c.port(args)
		case "USER":
			c.user(args)
		case "QUIT": // close
			c.respond(status221)
			return
		case "RETR": // get
			c.retr(args)
		case "TYPE":
			c.setDataType(args)
		default:
			c.respond(status502)
		}
	}
	if s.Err() != nil {
		fmt.Print(s.Err())
	}
	
}