from django.db import models

class JobPost(models.Model):
    title = models.CharField(max_length=255)
    department = models.ForeignKey('Department', on_delete=models.SET_NULL, null=True, related_name='jobposts')
    description = models.TextField(blank=True)
    job_created_at = models.DateTimeField(auto_now_add=True)
    job_last_date = models.DateTimeField(null=True, blank=True)

    def __str__(self):
        return self.title

class Department(models.Model):
    name = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.name

class JobApplication(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    father_name = models.CharField(max_length=100)
    date_of_birth = models.DateField()
    gender = models.CharField(max_length=10, choices=[('Male', 'Male'), ('Female', 'Female')])
    email = models.EmailField()
    mobile = models.CharField(max_length=15)
    country = models.ForeignKey('Country', on_delete=models.SET_NULL, null=True, related_name='applications')
    state = models.ForeignKey('State', on_delete=models.SET_NULL, null=True, related_name='applications')
    city = models.ForeignKey('City', on_delete=models.SET_NULL, null=True, related_name='applications')
    CATEGORY_CHOICES = [
        ('General', 'General'),
        ('OBC', 'OBC'),
        ('SC', 'SC'),
        ('ST', 'ST'),
        ('Other', 'Other'),
    ]
    category = models.CharField(max_length=20, choices=CATEGORY_CHOICES)
    NATIONALITY_CHOICES = [
        ('Indian', 'Indian'),
        ('Other', 'Other'),
    ]
    nationality = models.CharField(max_length=20, choices=NATIONALITY_CHOICES)
    correspondence_address = models.TextField()
    permanent_address = models.TextField()
    MARITAL_STATUS_CHOICES = [
        ('Single', 'Single'),
        ('Married', 'Married'),
        ('Divorced', 'Divorced'),
        ('Widowed', 'Widowed'),
        ('Other', 'Other'),
    ]
    marital_status = models.CharField(max_length=20, choices=MARITAL_STATUS_CHOICES)
    position_applied_for = models.CharField(max_length=255)
    department = models.ForeignKey('Department', on_delete=models.SET_NULL, null=True, related_name='applications')
    job_post = models.ForeignKey(JobPost, on_delete=models.CASCADE, related_name='applications')

    def __str__(self):
        return f"{self.first_name} {self.last_name} - {self.position_applied_for}"

class Country(models.Model):
    name = models.CharField(max_length=100, unique=True)

    def __str__(self):
        return self.name

class State(models.Model):
    name = models.CharField(max_length=100)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, related_name='states')

    def __str__(self):
        return self.name

class City(models.Model):
    name = models.CharField(max_length=100)
    state = models.ForeignKey(State, on_delete=models.CASCADE, related_name='cities')

    def __str__(self):
        return self.name

class AcademicQualification(models.Model):
    DEGREE_CHOICES = [
        ('Ph.D', 'Ph.D'),
        ('PG', 'PG'),
        ('UG', 'UG'),
        ('12th', '12th'),
        ('10th', '10th'),
        ('Other', 'Other'),
    ]
    job_application = models.ForeignKey(JobApplication, on_delete=models.CASCADE, related_name='qualifications')
    degree = models.CharField(max_length=20, choices=DEGREE_CHOICES)
    specialization = models.CharField(max_length=100)
    institute = models.CharField(max_length=100)
    year = models.PositiveIntegerField()
    marks = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return f"{self.degree} - {self.specialization}"
