from django.contrib import admin
from users.models import User, UserPermissions, Client, ClientRelation, Cities, Airlines, LoginOTP, Settings, State, Menu, ClientVisa, Company, ClientDocument, AuthGroupsUser, ClientFrequentFlyer, Countries, ClientPassport, ClientFrequentFlyer, ClientLog, ClientTravelInsurance, AssocClientCompany, AuthLogin, AuthPermissionsUser, AuthRememberToken, AuthTokenLogin, AuthLogin, EmailSetup
# Register your models here.


@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    list_display = (
        'id', 'email', 'username', 'designation', 'is_active',
        'is_staff', 'is_superuser', 'last_login'
    )
    list_filter = ('is_active', 'is_staff', 'is_superuser')
    search_fields = ('username', 'email')
    # list_display_links = ('id', 'username')
    ordering = ('id',)

# admin.site.register(ClientRelation)
@admin.register(ClientRelation)
class ClientRelationAdmin(admin.ModelAdmin):
    list_display = ('id', 'from_client', 'to_client', 'relation', 'cross_relation')

@admin.register(Client)
class ClientAdmin(admin.ModelAdmin):
    list_display = ('client_id', 'client_code', 'client_first_name', 'client_last_name', 'contact_no', 'email', 'client_type', 'relation', 'crossrelation', 'client_status', 'is_active')
    search_fields = ('client_first_name', 'client_last_name', 'email', 'client_code')
    # list_display_links = ('name',)
    list_filter = ['email', 'gender', 'dob', 'anniversary_date']

@admin.register(Airlines)
class AirlinesAdmin(admin.ModelAdmin):
    list_display = ['id', 'iata', 'icao', 'airline', 'callsign', 'country']
    search_fields = ['airline', 'iata', 'icao', 'callsign', 'country']
    list_filter = ['country']

@admin.register(Menu)
class MenuAdmin(admin.ModelAdmin):
    list_display = ('id', 'menu_name', 'menu_action', 'menu_url', 'ref_menu', 'menu_order_no', 'menu_status', 'menu_default')
    list_filter = ('menu_status',)
    search_fields = ('menu_name', 'menu_url')
    ordering = ('menu_order_no',)


# admin.site.register(UserPermissions)
@admin.register(UserPermissions)
class UserPermissionsAdmin(admin.ModelAdmin):
    list_display = [
        'id', 
        'ref_user_id', 
        'ref_menu_id', 
        'can_view', 
        'can_add', 
        'can_edit', 
        'can_delete', 
        'can_export'
    ]
    list_filter = ['can_view', 'can_add', 'can_edit', 'can_delete', 'can_export']
    search_fields = ['ref_user_id__username', 'ref_menu_id__menu_name']


admin.site.register(Settings)
# admin.site.register(Migrations)
@admin.register(EmailSetup)
class EmailSetupAdmin(admin.ModelAdmin):
    list_display = ['id', 'report_type']
    # search_fields = ['name', 'shortname']



@admin.register(Countries)
class CountryAdmin(admin.ModelAdmin):
    list_display = ['id', 'shortname', 'name', 'country_code', 'min_length', 'max_length']
    search_fields = ['name', 'shortname']

@admin.register(State)
class StateAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'country_id']
    list_filter = ['country_id']
    search_fields = ['name']

@admin.register(Cities)
class CityAdmin(admin.ModelAdmin):
    list_display = ('id', 'name', 'state_id')
    list_filter = ('state_id',)    

    def get_state_name(self, obj):
        return obj.state_id.name if obj.state_id else '-'
    get_state_name.short_description = 'State'

# admin.site.register(ClientVisa)
@admin.register(ClientVisa)
class ClientVisaAdmin(admin.ModelAdmin):
    list_display = ('id', 'ref_client', 'ref_visa_country', 'passport_size_photograph', 'visa_type', 'visa_from_date', 'visa_to_date')
    list_filter = ('visa_type', 'visa_from_date', 'visa_to_date')

@admin.register(Company)
class CompanyAdmin(admin.ModelAdmin):
    list_display = (
        'id', 'company_name', 'gst_name', 'gst_no', 'company_country', 'company_state', 'company_city', 'company_status', 'is_active',
    )
    list_filter = ('company_status', 'is_active', 'company_country', 'company_state')
    search_fields = ('company_name', 'gst_name', 'gst_no', 'company_address')
    # ordering = ('-created_at',)

# admin.site.register(ClientDocument)
@admin.register(ClientDocument)
class ClientDocumentAdmin(admin.ModelAdmin):
    list_display = ('id', 'ref_client', 'other_document', 'other_document_name')

admin.site.register(AuthGroupsUser)

# admin.site.register(ClientFrequentFlyer)
@admin.register(ClientFrequentFlyer)
class ClientFrequentFlyerAdmin(admin.ModelAdmin):
    list_display = ('id', 'ref_client', 'ref_airline', 'ff_no')

@admin.register(ClientLog)
class ClientLogAdmin(admin.ModelAdmin):
    list_display = ('id', 'ref_client_id', 'ref_table_name', 'ref_id', 'action_type', 'performed_by', 'performed_at')

# admin.site.register(ClientPassport)
@admin.register(ClientPassport)
class ClientPassportAdmin(admin.ModelAdmin):
    list_display = ('id', 'ref_client', 'passport_no', 'passport_file', 'passport_expiry_date')
    list_filter = ('passport_no', 'passport_expiry_date')

@admin.register(LoginOTP)
class LoginOTPAdmin(admin.ModelAdmin):
    list_display = ('id', 'is_verified', 'otp', 'created_at', 'purpose')

# admin.site.register(ForgotPasswordOTP)

# admin.site.register(ClientTravelInsurance)
@admin.register(ClientTravelInsurance)
class ClientTravelInsuranceAdmin(admin.ModelAdmin):
    list_display = ('id', 'ref_client', 'insurance_document', 'insurance_from_date', 'insurance_to_date')
    list_filter = ('insurance_from_date', 'insurance_to_date')

# admin.site.register(AssocClientCompany)
@admin.register(AssocClientCompany)
class AssocClientCompanyAdmin(admin.ModelAdmin):
    list_display = ('id', 'ref_client', 'ref_company', 'designation', 'primary_company')

admin.site.register(AuthLogin)
admin.site.register(AuthTokenLogin)
admin.site.register(AuthRememberToken)
admin.site.register(AuthPermissionsUser)