from lbrynet.lbryfile.StreamDescriptor import EncryptedFileStreamType
from lbrynet.lbryfile.StreamDescriptor import EncryptedFileStreamDescriptorValidator
from lbrynet.core.DownloadOption import DownloadOption, DownloadOptionChoice


def add_lbry_file_to_sd_identifier(sd_identifier):
    sd_identifier.add_stream_type(
        EncryptedFileStreamType, EncryptedFileStreamDescriptorValidator, EncryptedFileOptions())


class EncryptedFileOptions(object):
    def __init__(self):
        pass

    def get_downloader_options(self, sd_validator, payment_rate_manager):
        prm = payment_rate_manager

        def get_default_data_rate_description():
            if prm.base.min_blob_data_payment_rate is None:
                return "Application default (%s LBC/MB)" % str(prm.base.min_blob_data_payment_rate)
            else:
                return "%f LBC/MB" % prm.base.min_blob_data_payment_rate

        rate_choices = []
        rate_choices.append(DownloadOptionChoice(
            prm.base.min_blob_data_payment_rate,
            "No change - %s" % get_default_data_rate_description(),
            "No change - %s" % get_default_data_rate_description()))
        if prm.base.min_blob_data_payment_rate is not None:
            rate_choices.append(DownloadOptionChoice(
                None,
                "Application default (%s LBC/MB)" % str(prm.base.min_blob_data_payment_rate),
                "Application default (%s LBC/MB)" % str(prm.base.min_blob_data_payment_rate)))
        rate_choices.append(DownloadOptionChoice(float,
                                                 "Enter rate in LBC/MB",
                                                 "Enter rate in LBC/MB"))

        options = [
            DownloadOption(
                rate_choices,
                "Rate which will be paid for data",
                "data payment rate",
                prm.base.min_blob_data_payment_rate,
                get_default_data_rate_description()
            ),
            DownloadOption(
                [
                    DownloadOptionChoice(bool,
                                         None,
                                         None,
                                         bool_options_description=("Allow", "Disallow")),
                ],
                "Allow reuploading data downloaded for this file",
                "allow upload",
                True,
                "Allow"
            ),
        ]
        return options