from django.db import models
from django.contrib.auth.models import AbstractUser
# from . import manager

class User_Types(models.Model):
    user_type = models.CharField(max_length=255, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


class User_Departments(models.Model):
    user_department = models.CharField(max_length=255, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


class Users(AbstractUser):
    user_type = models.ForeignKey(User_Types, on_delete=models.SET_NULL, blank=True, null=True, related_name='type')
    email = models.CharField(max_length=255, blank=True, null=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    password = models.CharField(max_length=255, blank=True, null=True)
    mobile = models.CharField(max_length=20, blank=True, null=True)
    profile_pic = models.ImageField(upload_to="users", blank=True, null=True)
    created_by = models.ForeignKey("self", blank=True, null=True, on_delete=models.CASCADE, related_name="user_created_by")


class Csr_Partners(models.Model):
    user = models.OneToOneField(Users, on_delete=models.CASCADE, blank=True, null=True, related_name='csr_partner')
    company_name = models.CharField(max_length=255, blank=False, null=False)
    authorised_person_name = models.CharField(max_length=255, blank=False, null=False)
    designation = models.CharField(max_length=255, blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


class Partner_Organizations(models.Model):
    user = models.OneToOneField(Users, on_delete=models.CASCADE, blank=True, null=True, related_name='partner_organization')
    company_name = models.CharField(max_length=255, blank=False, null=False)
    authorised_person_name = models.CharField(max_length=255, blank=False, null=False)
    designation = models.CharField(max_length=255, blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


class Permissions(models.Model):
    user_type = models.OneToOneField(User_Types, on_delete=models.CASCADE, blank=True, null=True, default="", related_name='user_permission')
    admin_department_user_type_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_user_type_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_user_type_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    admin_department_user_department_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_user_department_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_user_department_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    admin_department_program_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_project_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_project_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_project_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    admin_department_letter_box_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_letter_box_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_letter_box_edit= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    admin_department_letter_box_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    program_department_program_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    program_department_program_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    program_department_program_edit= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    program_department_program_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    program_department_program_import= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    program_department_program_export= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    program_department_deliverables_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    program_department_deliverables_import= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    program_department_deliverables_export= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    hr_department_team_registration_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    hr_department_team_registration_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    hr_department_team_registration_edit= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    hr_department_team_registration_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))

    hr_department_vendor_registration_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    hr_department_vendor_registration_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    hr_department_vendor_registration_edit= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    hr_department_vendor_registration_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))

    hr_department_attendance_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    hr_department_attendance_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    hr_department_attendance_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    finance_department_income_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    finance_department_income_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    finance_department_income_edit= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    finance_department_income_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    finance_department_income_export= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    finance_department_expenditure_view= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    finance_department_expenditure_add= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    finance_department_expenditure_edit= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    finance_department_expenditure_delete= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    finance_department_expenditure_export= models.IntegerField(default =0, choices=((0, 'No'), (1, 'Yes')))
    
    created_at = models.DateTimeField(auto_now_add= True)
    updated_at = models.DateTimeField(auto_now=True)


class Letter_Boxes(models.Model):
    receipt_type = models.IntegerField(default =0, choices=((0, 'Received'), (1, 'Dispatched')))
    date = models.CharField(max_length=255, blank=False, null=False)
    letter_box = models.IntegerField(default =0, choices=((0, 'Sender'), (1, 'Receiver')))
    name = models.CharField(max_length=255, blank=False, null=False)
    department = models.ForeignKey(User_Departments, on_delete=models.SET_NULL, blank=True, null=True, related_name='letter_box_department')
    reference_no = models.CharField(max_length=255, blank=False, null=False) 
    letter_type = models.IntegerField(default =0, choices=((0, 'Offer Letter'), (1, 'Appointment Letter'), (2, 'Office Letter'),(3, 'Govt. Notice'), (4, 'Letter Of Recomndation'), (5, 'Cover Letter'), (6, 'Resignation Letter'), (7, 'Annoucement Letter'), (8, 'Complaint Letter'), (9, 'Thank You Letter'), (10, 'Interview Follow Up Letter'), (11, 'Termination Letters'), (12, 'Others')))
    subject = models.CharField(max_length=255, blank=False, null=False) 
    description = models.TextField(blank=False, null=False) 
    pdf = models.FileField(upload_to="letter-box", blank=True, null=True) 
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)