"""Test yadm.alt-copy"""

import os
import pytest


@pytest.mark.parametrize(
    'cygwin',
    [pytest.param(True, marks=pytest.mark.deprecated), False],
    ids=['cygwin', 'no-cygwin'])
@pytest.mark.parametrize(
    'compatibility', [True, False], ids=['compat', 'no-compat'])
@pytest.mark.parametrize(
    'setting, expect_link, pre_existing', [
        (None, True, None),
        (True, False, None),
        (False, True, None),
        (True, False, 'link'),
        (True, False, 'file'),
    ],
    ids=[
        'unset',
        'true',
        'false',
        'pre-existing symlink',
        'pre-existing file',
    ])
@pytest.mark.usefixtures('ds1_copy')
def test_alt_copy(
        runner, yadm_y, paths, tst_sys,
        setting, expect_link, pre_existing,
        compatibility, cygwin):
    """Test yadm.alt-copy"""

    option = 'yadm.cygwin-copy' if cygwin else 'yadm.alt-copy'

    if setting is not None:
        os.system(' '.join(yadm_y('config', option, str(setting))))

    if compatibility:
        expected_content = f'test_alt_copy##{tst_sys}'
    else:
        expected_content = f'test_alt_copy##os.{tst_sys}'

    alt_path = paths.work.join('test_alt_copy')
    if pre_existing == 'symlink':
        alt_path.mklinkto(expected_content)
    elif pre_existing == 'file':
        alt_path.write('wrong content')

    env = os.environ.copy()
    if compatibility:
        env['YADM_COMPATIBILITY'] = '1'

    run = runner(yadm_y('alt'), env=env)
    assert run.success
    assert run.err == ''
    assert 'Linking' in run.out

    assert alt_path.read() == expected_content
    assert alt_path.islink() == expect_link