
    0i                        d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZ dd
lmZ  G d de      ZddZddZ	 	 	 	 	 	 	 	 ddZddZy)u  Figures DOCX builder — TürkPatent resim sayfası kuralları.

reference-scripts/build_turkpatent_figures_docx.py'den adapte edildi.

TPMK resim sayfası farkları (tarifname/istem/özet'ten):
- Kenarlar: Üst 25 mm / Sol 25 mm / Sağ 15 mm / Alt 10 mm (farklı set)
- Satır numarası YOK
- Sayfa numarası `N/toplam` formatında (Word PAGE field + literal "/<total>")
- Her şekil ayrı sayfada, sayfada "Şekil N" etiketli
    )annotationsN)	TypedDict)Document)WD_ALIGN_PARAGRAPH)OxmlElement)qn)MmPt)Imagec                  "    e Zd ZU ded<   ded<   y)FigureInputbytes	png_bytesz
str | NonetitleN)__name__
__module____qualname____annotations__     8/var/www/ai.patentyazar.com/app/services/docx/figures.pyr   r      s    r   r   c                   t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        t        d      | _        y )Ni)           
      )	r	   page_height
page_width
top_marginleft_marginright_marginbottom_marginheader_distancefooter_distance)sections    r   _set_figure_page_marginsr'      sb    S'GCGBGR&Gb6GrFG fG eGr   c                   | j                   d   }t        j                  |_        |j	                         }d|j
                  _        t        d      |j
                  _        t        d      }|j                  t        d      d       t        d      }|j                  t        d      d	       d
|_        t        d      }|j                  t        d      d       |j                  j                  |       |j                  j                  |       |j                  j                  |       |j	                  d|       }d|j
                  _        t        d      |j
                  _        y)uB   Alt ortalanmış 'PAGE/N' — PAGE dinamik field, N literal sabit.r   Times New Roman   z	w:fldCharzw:fldCharTypebeginzw:instrTextz	xml:spacepreservePAGEend/N)
paragraphsr   CENTER	alignmentadd_runfontnamer
   sizer   setr   text_rappend)footertotal_pagesprunr+   instrr.   run2s           r   _add_page_number_n_of_totalrA   )   s   !A$++AK
))+C%CHHMrFCHHM $E	IIb!7+&E	IIboz*EJ
k
"CGGB'FFMM%FFMM%FFMM# 99q&'D&DIINVDIINr   c                    t        j                  t        j                  |             5 }|j                  \  }}ddd       dk  sdk  r||fS ||z  }|}||z  }||kD  r|}||z  }||fS # 1 sw Y   3xY w)uE   En-boy oranını koruyarak sayfaya sığan en büyük boyutu hesapla.Nr   )r   openioBytesIOr6   )	r   max_width_mmmax_height_mmimpx_wpx_hratiow_mmh_mms	            r   _compute_image_size_mmrN   D   s     
BJJy)	* bWW
dqyDAI]**4KED%<Dme|: s   A++A4c                   |st        d      t               }|j                  d   }d|j                  _        t        d      |j                  _        |j                  d   }t        |       t        |j                  t        |             d}d}t        |d	      D ]  \  }}|dkD  r|j                          t        |d
   ||      \  }	}
|j                         }t         j"                  |_        |j'                         }|j)                  t+        j,                  |d
         t/        |	             |j                         }t         j"                  |_        |j'                  d|       }d|_        d|j                  _        t        d      |j                  _        t        d      |j2                  _        |j7                  d      xs dj9                         }|sB|j                         }t         j"                  |_        |j'                  |      }d|j                  _        t        d      |j                  _         | }
t+        j,                         }|j;                  |       |j=                         S )uC  Resimler.docx — her şekil ayrı sayfada, 'Şekil N' etiketli.

    Args:
        title: Patent başlığı (ilk sayfada merkezli gösterilebilir ama
            TPMK formatı gerekmez; boş bırakılabilir).
        figures: [{"png_bytes": b"...", "title": "Sistem mimarisi"}, ...]

    Returns:
        DOCX bytes.
    zFigures list cannot be empty.Normalr)      r            )startr   )widthu   Şekil T   r    r*   )
ValueErrorr   stylesr4   r5   r
   r6   sectionsr'   rA   r;   len	enumerateadd_page_breakrN   add_paragraphr   r1   r2   r3   add_picturerD   rE   r	   boldparagraph_formatspace_beforegetstripsavegetvalue)r   figuresdocstyler&   max_w_mmmax_h_mmifigrL   _r=   r>   captioncr	fig_titlesubsrbuffers                      r   build_figures_docxrv   W   s    899
*C JJx E'EJJOfEJJO ll1oGW%G= H!HG1- "3q5 ([)98XNa (//iik

3{#34BtHE ##%.55__wqc]+("v021  -WWW%+224	##%C.55CMY'B,BGGLb6BGGL7": 	AZZ\FHHV??r   )returnNone)r<   intrw   rx   )r   r   rF   floatrG   rz   rw   ztuple[float, float])r   strrh   zlist[FigureInput]rw   r   )__doc__
__future__r   rD   typingr   docxr   docx.enum.textr   	docx.oxmlr   docx.oxml.nsr   docx.sharedr	   r
   PILr   r   r'   rA   rN   rv   r   r   r   <module>r      sk   	 # 	   - !   ) 
$6  	&?r   