# -*- coding:utf-8 -*-


import pickle
import json
from typing import Any, Iterable




class pickleIO:

    def __init__(self,fileName:str,data: Any = None) -> None:
        '''简单的pickle操作功能'''
        self.file = fileName
        if data:
            self._data = data
        else:
            with open (self.file, 'rb') as f: 
                self._data = pickle.load(f)

    def __call__(self, *args: Any, **kwds: Any) -> Any:
        return self.data

    def write(self):
        '''将数据写入pickle'''
        with open (self.file, 'wb') as f: 
            pickle.dump(self._data, f) 


    def load(self) -> Any:
        '''从文件读取数据'''
        with open (self.file, 'rb') as f: 
            self._data = pickle.load(f)
        return self.data

    @property
    def data(self):
        '''返回数据值'''
        if self._data is None:
            raise ValueError('无可用值载入或值为None')
        else:
            return self._data



class jsonIO:

    def __init__(self,fileName:str,data: Any = None) -> None:
        '''简单的json操作功能'''
        self.file = fileName
        if data:
            self._data = data
        else:
            with open (self.file, 'r', encoding='utf-8') as f: 
                self._data = json.load(f)

    def __call__(self, *args: Any, **kwds: Any) -> Any:
        return self.data

    def write(self):
        '''将数据写入json'''
        with open (self.file, 'w', encoding='utf-8') as f: 
            json.dump(self._data, f) 


    def load(self) -> Any:
        '''从文件读取数据'''
        with open (self.file, 'r', encoding='utf-8') as f: 
            self._data = json.load(f)
        return self.data

    @property
    def data(self):
        '''返回数据值'''
        return self._data


class uniteIO:

    def __init__(self,fileName:str,fileType = None,data: Any = None) -> None:
        '''简单的文件数据IO操作功能'''
        self.filename = fileName
        if not fileType is None:
            self._type = fileType
        else:
            try:
                with open (self.filename, 'r', encoding='utf-8') as f: 
                    self._type = json
            except:
                with open (self.file, 'rb') as f: 
                    self._type = pickle



        if not data is None:
            self._data = data
        else:
            self._data = self.load()
    

    def __call__(self, *args: Any, **kwds: Any) -> Any:
        return self.data

    def write(self):
        '''将数据写入文件'''
        if self._type == json:
            self._wfile = open(self.filename, 'w', encoding='utf-8')
        elif self._type == pickle:
            self._wfile = open(self.file, 'wb')
        self._type.dump(self._data, self._wfile) 


    def load(self) -> Any:
        '''从文件读取数据'''
        if self._type == json:
            self._rfile = open(self.filename, 'r', encoding='utf-8')
        elif self._type == pickle:
            self._rfile = open(self.file, 'rb')
        self._data = self._type.load(self._rfile)
        return self.data

    @property
    def data(self):
        '''返回数据值'''
        return self._data




















if __name__ == '__main__':
    from sys import argv

    if argv[1]:
        input(uniteIO(argv[1]).data)