from cargo.models import ExpenseCategory, AddExpense, Item, Invoice, InvoiceItems
from django import forms
from django.contrib.auth.models import User
from .models import Profile, Category, Testimonial, AnswerComment, Review, ReviewReply, FAQ, FAQAnswer

from django import forms
from .models import Product


class InvoiceForm(forms.ModelForm):
    class Meta:
        model = Invoice
        fields = [
            'sender', 'receiver', 'by_cargo', 'destination',
            'item_value', 'item_description', 'amount_paid',
            'remarks', 'track_number'
        ]
        widgets = {
            'sender': forms.Select(attrs={'class': 'form-select'}),
            'receiver': forms.Select(attrs={'class': 'form-select'}),
            'by_cargo': forms.Select(attrs={'class': 'form-select'}),
            'destination': forms.TextInput(attrs={'class': 'form-control'}),
            'item_value': forms.NumberInput(attrs={'class': 'form-control'}),
            'item_description': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
            'amount_paid': forms.NumberInput(attrs={'class': 'form-control'}),
            'remarks': forms.TextInput(attrs={'class': 'form-control'}),
            'track_number': forms.TextInput(attrs={'class': 'form-control'}),
        }


class InvoiceItemsForm(forms.ModelForm):
    class Meta:
        model = InvoiceItems
        fields = [
            'item', 'quantity', 'unit_price', 'handling_charges',
        ]
        widgets = {
            # dropdown field
            'item': forms.Select(attrs={'class': 'form-select'}),
            'quantity': forms.NumberInput(attrs={'class': 'form-control'}),
            'unit_price': forms.NumberInput(attrs={'class': 'form-control'}),
            'handling_charges': forms.NumberInput(attrs={'class': 'form-control'}),
        }


class ItemForm(forms.ModelForm):
    class Meta:
        model = Item
        fields = ['title', 'measurement_unit', 'details']

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.fields['title'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Enter item title'
        })
        self.fields['measurement_unit'].widget.attrs.update({
            'class': 'form-select'
        })
        self.fields['details'].widget.attrs.update({
            'class': 'form-control',
            'placeholder': 'Enter details'
        })


class ProductForm(forms.ModelForm):
    class Meta:
        model = Product
        fields = '__all__'
        widgets = {
            'name': forms.TextInput(attrs={'class': 'form-control'}),
            'category': forms.Select(attrs={'class': 'form-select'}),
            'price': forms.NumberInput(attrs={'class': 'form-control'}),
            'stock': forms.NumberInput(attrs={'class': 'form-control'}),
            'rating': forms.NumberInput(attrs={'class': 'form-control'}),
            'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 4}),
            'image': forms.ClearableFileInput(attrs={'class': 'form-control'}),
            'is_featured': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
        }


class ExpenseCategoryForm(forms.ModelForm):
    class Meta:
        model = ExpenseCategory
        fields = ['title', 'remarks']
        widgets = {
            'title': forms.TextInput(attrs={'class': 'form-control'}),
            'remarks': forms.Textarea(attrs={'class': 'form-control', 'rows': 4}),
        }


class AddExpenseForm(forms.ModelForm):
    class Meta:
        model = AddExpense
        exclude = ['created_by', 'updated_by', 'created_at', 'updated_at']
        widgets = {
            'expense_category': forms.Select(attrs={'class': 'form-select'}),
            'paid_by': forms.TextInput(attrs={'class': 'form-control'}),
            'paid_to': forms.TextInput(attrs={'class': 'form-control'}),
            'amount': forms.NumberInput(attrs={'class': 'form-control'}),
            'currency': forms.Select(attrs={'class': 'form-select'}),
            'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
            'remarks': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
            'date': forms.DateInput(attrs={'type': 'date', 'class': 'form-control'}),
        }


class CategoryForm(forms.ModelForm):
    class Meta:
        model = Category
        fields = ['name']
        widgets = {
            'name': forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'Enter category name'
            }),
        }


class UserUpdateForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['username', 'email']

    def __init__(self, *args, **kwargs):
        super(UserUpdateForm, self).__init__(*args, **kwargs)
        self.fields['username'].widget.attrs.update(
            {'class': 'form-control', 'placeholder': 'Enter username'})
        self.fields['email'].widget.attrs.update(
            {'class': 'form-control', 'placeholder': 'Enter email'})


class ProfileUpdateForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ['image']

    def __init__(self, *args, **kwargs):
        super(ProfileUpdateForm, self).__init__(*args, **kwargs)
        self.fields['image'].widget.attrs.update({'class': 'form-control'})


class TestimonialForm(forms.ModelForm):
    class Meta:
        model = Testimonial
        fields = ['message', 'rating']
        widgets = {
            'message': forms.Textarea(attrs={'rows': 4, 'class': 'form-control', 'placeholder': 'Write your experience...'}),
            'rating': forms.Select(attrs={'class': 'form-control'}),
        }


class ReviewForm(forms.ModelForm):
    class Meta:
        model = Review
        fields = ['rating', 'comment']
        widgets = {
            'rating': forms.Select(choices=[(i, f"{i} ⭐") for i in range(1, 6)], attrs={'class': 'form-select'}),
            'comment': forms.Textarea(attrs={'class': 'form-control', 'rows': 3, 'placeholder': 'Write your review...'}),
        }


class ReviewReplyForm(forms.ModelForm):
    class Meta:
        model = ReviewReply
        fields = ['reply_text']


class FAQForm(forms.ModelForm):
    class Meta:
        model = FAQ
        fields = ["question", "category"]


class FAQAnswerForm(forms.ModelForm):
    class Meta:
        model = FAQAnswer
        fields = ["answer"]


class AnswerCommentForm(forms.ModelForm):
    class Meta:
        model = AnswerComment
        fields = ["comment"]
        widgets = {
            "comment": forms.Textarea(attrs={
                "class": "form-control",
                "placeholder": "Write your comment...",
                "rows": 2
            })
        }
