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

from __future__ import with_statement

import re

from os import remove
from os.path import basename, exists

from pyload.plugin.internal.Crypter import Crypter
from pyload.utils import fs_join


class Container(Crypter):
    __name    = "Container"
    __type    = "container"
    __version = "0.01"

    __pattern = r'^unmatchable$'
    __config  = []  #: [("name", "type", "desc", "default")]

    __description = """Base container decrypter plugin"""
    __license     = "GPLv3"
    __authors     = [("mkaay", "mkaay@mkaay.de")]


    def preprocessing(self, thread):
        """prepare"""

        self.setup()
        self.thread = thread

        self.loadToDisk()

        self.decrypt(self.pyfile)
        self.deleteTmp()

        self.createPackages()


    def loadToDisk(self):
        """loads container to disk if its stored remotely and overwrite url,
        or check existent on several places at disk"""

        if self.pyfile.url.startswith("http"):
            self.pyfile.name = re.findall("([^\/=]+)", self.pyfile.url)[-1]
            content = self.load(self.pyfile.url)
            self.pyfile.url = fs_join(self.core.config['general']['download_folder'], self.pyfile.name)
            try:
                with open(self.pyfile.url, "wb") as f:
                    f.write(content)
            except IOError, e:
                self.fail(str(e))

        else:
            self.pyfile.name = basename(self.pyfile.url)
            if not exists(self.pyfile.url):
                if exists(fs_join(pypath, self.pyfile.url)):
                    self.pyfile.url = fs_join(pypath, self.pyfile.url)
                else:
                    self.fail(_("File not exists"))


    def deleteTmp(self):
        if self.pyfile.name.startswith("tmp_"):
            remove(self.pyfile.url)