from django.shortcuts import get_object_or_404
from django.utils.text import slugify

from jobs.models import Job, JobAttachment


def company_initials(name):
    parts = [part for part in str(name).split() if part]
    if len(parts) >= 2:
        return (parts[0][0] + parts[1][0]).upper()
    if parts:
        return parts[0][:2].upper()
    return 'CO'


def apply_company_to_job(job, user, company=None, company_name=None):
    """Set company branding on a job from a company profile or explicit name."""
    if user.is_platform_admin and company_name:
        job.company_name = company_name.strip()
        job.company_slug = slugify(job.company_name)
        job.company_initials = company_initials(job.company_name)
        if company:
            job.company_logo_gradient = company.logo_gradient
            if company.industry and not job.company_industry:
                job.company_industry = company.industry
        return

    if company:
        job.company_name = company.name
        job.company_slug = company.slug
        job.company_initials = company.initials
        job.company_logo_gradient = company.logo_gradient
        if not job.company_industry:
            job.company_industry = company.industry
        return

    job.company_name = user.get_full_name() or user.username
    job.company_slug = slugify(job.company_name)
    job.company_initials = company_initials(job.company_name)


def get_editable_job(user, slug):
    queryset = Job.objects.select_related('posted_by').prefetch_related('attachments')
    if user.is_platform_admin:
        return get_object_or_404(queryset, slug=slug)
    return get_object_or_404(queryset, slug=slug, posted_by=user)


def get_editable_attachment(user, pk):
    queryset = JobAttachment.objects.select_related('job')
    if user.is_platform_admin:
        return get_object_or_404(queryset, pk=pk)
    return get_object_or_404(queryset, pk=pk, job__posted_by=user)
