"""企业数据访问（共享）：跨国家通用的 ORM 查询 / 生成文件回写。"""
from __future__ import annotations

import uuid
from datetime import datetime

from sqlalchemy import text
from sqlalchemy.orm import Session

from app.models import EnterpriseInfo


def get_enterprise(session: Session, company_id: int) -> EnterpriseInfo | None:
    """按业务整数 ID（CompanyID）查询企业。"""
    return session.get(EnterpriseInfo, company_id)


def insert_generated_file(
    session: Session,
    *,
    vat_reg_info_id: str | None,
    file_name: str,
    file_size: int,
    file_url: str,
    file_ext: str = ".pdf",
    file_type: str = "pdf",
    file_category_id: str = "",
) -> bool:
    """回写生成文件到 Base_AnnexesFile：按 InfoId + FileCategoryId 判断，已存在则更新，否则插入。"""
    if not vat_reg_info_id:
        return False

    existing_id = session.execute(
        text("SELECT TOP 1 F_Id FROM Base_AnnexesFile WHERE FileCategoryId=:category AND InfoId=:infoid"),
        {"category": file_category_id, "infoid": vat_reg_info_id},
    ).scalar()

    if existing_id:
        session.execute(
            text(
                "UPDATE Base_AnnexesFile SET F_FileName=:fname, F_FilePath=:fpath, F_FileSize=:fsize, "
                "F_FileExtensions=:ext, F_FileType=:ftype, FileUrl=:furl, "
                "ModificationDate=:mdate, Modification_Id='System' WHERE FileCategoryId=:category AND F_Id=:fid"
            ),
            {
                "category": file_category_id,
                "fname": file_name,
                "fpath": file_url,
                "fsize": str(file_size),
                "ext": file_ext,
                "ftype": file_type,
                "furl": file_url,
                "mdate": datetime.now(),
                "fid": existing_id,
            },
        )
    else:
        session.execute(
            text(
                "INSERT INTO Base_AnnexesFile (F_Id, F_FolderId, F_FileName, F_FilePath, CreationName, "
                "F_FileSize, F_FileExtensions, F_FileType, F_DownloadCount, CreationDate, Creation_Id, "
                "InfoId, FileCover, FileUrl, FileFrom, FileGroup, FileCategoryId) "
                "VALUES (:fid, '', :fname, :fpath, 'System', :fsize, :ext, :ftype, 0, :cdate, 'System', "
                ":infoid, NULL, :furl, 3, 2, :category)"
            ),
            {
                "fid": str(uuid.uuid4()),
                "fname": file_name,
                "fpath": file_url,
                "fsize": str(file_size),
                "ext": file_ext,
                "ftype": file_type,
                "cdate": datetime.now(),
                "infoid": vat_reg_info_id,
                "furl": file_url,
                "category": file_category_id,
            },
        )
    session.commit()
    return True
