classdef Tiff
    properties (Constant = true)
        % TODO(maged): Add the remaining fields
        TagID = struct(
            "SubFileType", 254
            "ImageWidth", 256
            "ImageLength", 257
            "BitsPerSample", 258
            "Compression", 259
            "Photometric", 262
            "Thresholding", 263
            "FillOrder", 266
            "DocumentName", 269
            "ImageDescription", 270
            "Make", 271
            "Model", 272
            "StripOffsets", 273
            "Orientation", 274
            "SamplesPerPixel", 277
            "RowsPerStrip", 278
            "StripByteCounts", 279
            "MinSampleValue", 280
            "MaxSampleValue", 281
            "XResolution", 282
            "YResolution", 283
            "PlanarConfiguration", 284
            "PageName", 285
            "XPosition", 286
            "YPosition", 287
            "GrayResponseUnit", 290,
            'GrayResponseCurve'. 291,
            "Group3Options", 292
            "Group4Options", 293
            "ResolutionUnit", 296
            "PageNumber", 297
            "TransferFunction", 301
            "Software", 305
            "DateTime", 306
            "Artist", 315
            "HostComputer", 316
            "WhitePoint", 318
            "PrimaryChromaticities", 319
            "ColorMap", 320
            "HalfToneHints", 321
            "TileWidth", 322
            "TileLength", 323
            "TileOffsets", 324
            "TileByteCounts", 325
            "SubIFD", 330
            "InkSet", 332
            "InkNames", 333
            "NumberOfInks", 334
            "DotRange", 336
            "TargetPrinter", 337
            "ExtraSamples", 338
            "SampleFormat", 339
            "SMinSampleValue", 340
            "SMaxSampleValue", 341
            "YCbCrCoefficients", 529
            "YCbCrSubSampling", 530
            "YCbCrPositioning", 531
            "ReferenceBlackWhite", 532
            "XMP", 700
            "ImageDepth", 32997
            "Copyright", 33432
            "RichTIFFIPTC", 33723
            "Photoshop", 34377
            "ICCProfile", 34675
            "SToNits", 37439
            "JPEGQuality", 65537
            "JPEGColorMode", 65538
            "ZipQuality", 65557
            "SGILogDataFmt", 65560
        )
    endproperties

    properties (Access = private)
        tiff_handle
    endproperties

    methods
        function t = Tiff(filename, mode="r")
            if (nargin == 0 || nargin > 2)
                % print_usage();
                error("Usage: Tiff(filename[, mode])");
            endif

            t.tiff_handle = __open_tiff__(filename, mode);
        endfunction

        function close(t)
            __close_tiff__(t.tiff_handle);
        endfunction

        function tag = getTag(t, tagName)
            tag = __tiff_get_tag__(t.tiff_handle, tagName);
        endfunction

        % TODO(maged): implement a print_usage
    endmethods
endclassdef