from django.contrib import admin
from api.models.data.products import Product
from api.models.data.stock import Stock
from api.models.data.customers import Customer
from api.models.data.vendors import Vendor
from api.models.data.salesmen import Salesman
from api.models.data.attachment import AttachedDocument
from api.models.data.sales import Sales, SalesItems
from api.models.data.returns import Return, ReturnItems
from api.models.data.currency import ExchangeRate
  
from api.models.data.expenses import Expense, ExpenseCategory
from api.models.data.account import Account, AccountEntry, EntryType
from api.models.data.employee import Employee
from api.models.data.equipment import Equipment
from api.models.data.payroll import Payroll
from api.models.data.attendance import Attendance, EmployeeLeave
from api.models.data.activity_log import ActivityLog

# Register all models with default admin configuration
admin.site.register(Product)
admin.site.register(Stock)
admin.site.register(Vendor)
admin.site.register(Customer)
admin.site.register(Salesman)
admin.site.register(AttachedDocument)
admin.site.register(Sales)
admin.site.register(SalesItems)
admin.site.register(Return)
admin.site.register(ReturnItems)
admin.site.register(ExchangeRate)
@admin.register(Expense)
class ExpenseAdmin(admin.ModelAdmin):
    list_display = ['category', 'amount', 'get_currency_info', 'expense_date', 'get_user_info']
    list_filter = ['category', 'currency', 'expense_date']
    search_fields = ['category__name', 'description', 'user__username', 'user__first_name', 'user__last_name']
    readonly_fields = ['created_at', 'updated_at']
    
    def get_currency_info(self, obj):
        if obj.currency:
            return f"{obj.currency.code} ({obj.currency.symbol})"
        return "-"
    get_currency_info.short_description = 'Currency'
    
    def get_user_info(self, obj):
        if obj.user:
            full_name = f"{obj.user.first_name} {obj.user.last_name}".strip()
            return full_name if full_name else obj.user.username
        return "-"
    get_user_info.short_description = 'User'

@admin.register(ExpenseCategory)
class ExpenseCategoryAdmin(admin.ModelAdmin):
    list_display = ['name', 'description']
    search_fields = ['name', 'description']
admin.site.register(Employee)
admin.site.register(Payroll)
admin.site.register(Attendance)
admin.site.register(EmployeeLeave)
@admin.register(Equipment)
class EquipmentAdmin(admin.ModelAdmin):
    list_display = [
        'name',
        'category',
        'status',
        'quantity',
        'unit_cost',
        'acquisition_type',
        'accumulated_depreciation',
        'is_opening_balance',
        'record_as_expense',
        'payment_method',
        'assigned_to',
        'is_active',
        'acquired_date',
    ]
    list_filter = [
        'status',
        'is_active',
        'is_opening_balance',
        'record_as_expense',
        'payment_method',
        'category',
        'currency',
    ]
    search_fields = ['name', 'serial_number', 'asset_tag', 'location', 'notes']

@admin.register(EntryType)
class EntryTypeAdmin(admin.ModelAdmin):
    list_display = ['name', 'created_at']
    search_fields = ['name']

@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):
    list_display = ['id', 'account_number', 'name', 'currency']
    list_filter = ['currency']
    search_fields = ['account_number', 'name']

@admin.register(AccountEntry)
class AccountEntryAdmin(admin.ModelAdmin):
    list_display = ['id', 'account', 'entry_type', 'debit_amount', 'credit_amount', 'entry_date', 'reference_number']
    list_filter = ['entry_type', 'entry_date']
    search_fields = ['reference_number', 'notes', 'account__account_number', 'account__name']
    readonly_fields = ['created_at', 'updated_at']

@admin.register(ActivityLog)
class ActivityLogAdmin(admin.ModelAdmin):
    list_display = ['user', 'action', 'model_name', 'object_id', 'created_at']
    list_filter = ['action', 'model_name', 'created_at']
    search_fields = ['description', 'user__username', 'user__email']
    readonly_fields = ['user', 'action', 'model_name', 'object_id', 'description', 'ip_address', 'user_agent', 'changes', 'created_at', 'updated_at']
    date_hierarchy = 'created_at'
    
    def has_add_permission(self, request):
        return False
    
    def has_change_permission(self, request, obj=None):
        return False
