# pragma pylint: disable=missing-docstring, C0103
import arrow
import pytest

from freqtrade.configuration import TimeRange


def test_parse_timerange_incorrect():

    assert TimeRange('date', None, 1274486400, 0) == TimeRange.parse_timerange('20100522-')
    assert TimeRange(None, 'date', 0, 1274486400) == TimeRange.parse_timerange('-20100522')
    timerange = TimeRange.parse_timerange('20100522-20150730')
    assert timerange == TimeRange('date', 'date', 1274486400, 1438214400)

    # Added test for unix timestamp - BTC genesis date
    assert TimeRange('date', None, 1231006505, 0) == TimeRange.parse_timerange('1231006505-')
    assert TimeRange(None, 'date', 0, 1233360000) == TimeRange.parse_timerange('-1233360000')
    timerange = TimeRange.parse_timerange('1231006505-1233360000')
    assert TimeRange('date', 'date', 1231006505, 1233360000) == timerange

    timerange = TimeRange.parse_timerange('1231006505000-1233360000000')
    assert TimeRange('date', 'date', 1231006505, 1233360000) == timerange

    timerange = TimeRange.parse_timerange('1231006505000-')
    assert TimeRange('date', None, 1231006505, 0) == timerange

    timerange = TimeRange.parse_timerange('-1231006505000')
    assert TimeRange(None, 'date', 0, 1231006505) == timerange

    with pytest.raises(Exception, match=r'Incorrect syntax.*'):
        TimeRange.parse_timerange('-')


def test_subtract_start():
    x = TimeRange('date', 'date', 1274486400, 1438214400)
    x.subtract_start(300)
    assert x.startts == 1274486400 - 300

    # Do nothing if no startdate exists
    x = TimeRange(None, 'date', 0, 1438214400)
    x.subtract_start(300)
    assert not x.startts

    x = TimeRange('date', None, 1274486400, 0)
    x.subtract_start(300)
    assert x.startts == 1274486400 - 300


def test_adjust_start_if_necessary():
    min_date = arrow.Arrow(2017, 11, 14, 21, 15, 00)

    x = TimeRange('date', 'date', 1510694100, 1510780500)
    # Adjust by 20 candles - min_date == startts
    x.adjust_start_if_necessary(300, 20, min_date)
    assert x.startts == 1510694100 + (20 * 300)

    x = TimeRange('date', 'date', 1510700100, 1510780500)
    # Do nothing, startup is set and different min_date
    x.adjust_start_if_necessary(300, 20, min_date)
    assert x.startts == 1510694100 + (20 * 300)

    x = TimeRange(None, 'date', 0, 1510780500)
    # Adjust by 20 candles = 20 * 5m
    x.adjust_start_if_necessary(300, 20, min_date)
    assert x.startts == 1510694100 + (20 * 300)