from django.contrib import admin
from .models import *

@admin.register(Role)
class RoleAdmin(admin.ModelAdmin):
    list_display = ['id', 'name']
    search_fields = ['name']

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    list_display = ['id', 'full_name', 'email', 'role', 'status', 'failed_login_attempts', 'last_login_at', 'created_at']
    list_filter = ['role', 'status', 'email_verified']
    search_fields = ['full_name', 'email', 'phone']
    readonly_fields = ['created_at', 'updated_at']

@admin.register(City)
class CityAdmin(admin.ModelAdmin):
    list_display = ['id', 'city_name']
    search_fields = ['city_name']

@admin.register(Operator)
class OperatorAdmin(admin.ModelAdmin):
    list_display = ['id', 'company_name', 'user', 'registration_number', 'verified']
    list_filter = ['verified']
    search_fields = ['company_name', 'registration_number', 'user__full_name']

@admin.register(Bus)
class BusAdmin(admin.ModelAdmin):
    list_display = ['id', 'bus_name', 'registration_no', 'operator', 'bus_type', 'total_seats', 'status']
    list_filter = ['bus_type', 'status']
    search_fields = ['bus_name', 'registration_no', 'operator__company_name']

@admin.register(Route)
class RouteAdmin(admin.ModelAdmin):
    list_display = ['id', 'source_city', 'destination_city', 'distance_km', 'estimated_duration_minutes']
    search_fields = ['source_city__city_name', 'destination_city__city_name']

@admin.register(Schedule)
class ScheduleAdmin(admin.ModelAdmin):
    list_display = ['id', 'route', 'bus', 'departure_time', 'arrival_time', 'fare', 'status']
    list_filter = ['status', 'departure_time']
    search_fields = ['route__source_city__city_name', 'route__destination_city__city_name', 'bus__bus_name']

@admin.register(Booking)
class BookingAdmin(admin.ModelAdmin):
    list_display = ['booking_code', 'user', 'schedule', 'total_amount', 'booking_status', 'booked_at']
    list_filter = ['booking_status', 'booked_at']
    search_fields = ['booking_code', 'user__full_name', 'user__email']
    readonly_fields = ['booked_at']

@admin.register(LoginLog)
class LoginLogAdmin(admin.ModelAdmin):
    """Read-only view of the login log inside Django admin."""
    list_display = ['id', 'created_at', 'email_attempted', 'role_name', 'status', 'ip_address', 'message']
    list_filter = ['status', 'role_name', 'created_at']
    search_fields = ['email_attempted', 'ip_address', 'message']
    readonly_fields = [f.name for f in LoginLog._meta.fields]

    def has_add_permission(self, request):
        return False  # logs are generated automatically, never typed in

    def has_change_permission(self, request, obj=None):
        return False  # logs must not be editable