import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import Accessor

from dcim.models import ConsolePort, Interface, PowerPort
from netbox.tables import BaseTable, columns

from .devices import PathEndpointTable

__all__ = (
    'ConsoleConnectionTable',
    'InterfaceConnectionTable',
    'PowerConnectionTable',
)


#
# Device connections
#

class ConsoleConnectionTable(PathEndpointTable):
    device = tables.Column(
        verbose_name=_('Device'),
        linkify=True
    )
    name = tables.Column(
        linkify=True,
        verbose_name=_('Console Port')
    )
    reachable = columns.BooleanColumn(
        accessor=Accessor('_path__is_active'),
        verbose_name=_('Reachable')
    )

    class Meta(BaseTable.Meta):
        model = ConsolePort
        fields = ('device', 'name', 'connection', 'reachable')


class PowerConnectionTable(PathEndpointTable):
    device = tables.Column(
        verbose_name=_('Device'),
        linkify=True
    )
    name = tables.Column(
        linkify=True,
        verbose_name=_('Power Port')
    )
    reachable = columns.BooleanColumn(
        accessor=Accessor('_path__is_active'),
        verbose_name=_('Reachable')
    )

    class Meta(BaseTable.Meta):
        model = PowerPort
        fields = ('device', 'name', 'connection', 'reachable')


class InterfaceConnectionTable(PathEndpointTable):
    device = tables.Column(
        verbose_name=_('Device'),
        accessor=Accessor('device'),
        linkify=True
    )
    interface = tables.Column(
        verbose_name=_('Interface'),
        accessor=Accessor('name'),
        linkify=True
    )
    reachable = columns.BooleanColumn(
        accessor=Accessor('_path__is_active'),
        verbose_name=_('Reachable')
    )

    class Meta(BaseTable.Meta):
        model = Interface
        fields = ('device', 'interface', 'connection', 'reachable')
